不少人第一次接触SSL证书,是浏览器地址栏弹出灰色不安全提示。网站本身可以正常打开,但访客看到提示会产生顾虑,尤其是填写手机号、下单的页面,会直接降低转化。想要解决这个问题,就要部署证书,让地址栏出现小锁标识。整套流程本身不算复杂,新手容易被各类文件名、配置项混淆,我把完整操作梳理一遍,按主流服务器环境分开说明。
先弄清楚下载得到的文件。无论在哪家服务商申请证书,解压之后一般会看到几类文件。证书文件后缀多为.crt或者.pem,相当于网站的公钥凭证,上传至服务器使用。私钥文件后缀.key,是配套密钥,绝对不能泄露,一旦外泄等同于交出访问权限。还有中间证书,也叫证书链,后缀同样是.crt或.pem,用来补齐信任链路。操作系统内置浏览器信任的根证书,你申请的证书由中间机构签发,缺少中间证书,浏览器无法建立从站点到根证书的信任链路,提示证书链不完整。部分服务商将站点证书和中间证书合并为单个文件,有的分开提供,下载完成先核对文件。

拿到证书文件,不要直接修改配置,第一步上传到服务器。Linux环境习惯把证书放在/etc/ssl/cert这类目录,不要放到网站根目录,根目录对外开放,私钥放在这里会直接泄露。Windows系统新建独立证书文件夹,例如D:\cert或者C:\cert。借助WinSCP、Xshell这类工具传输文件,留意目录路径,避免传错位置。
接下来确认Web服务器类型。Linux环境使用Nginx的用户最多。Nginx证书配置写在server块内,找到监听443端口的server段落,不存在就新建。两条核心指令,ssl_certificate填写证书完整路径,ssl_certificate_key填写私钥完整路径。有一处细节容易遗漏,如果站点证书和中间证书分属两个文件,ssl_certificate需要指向合并后的文件,或者串联两个文件路径。Nginx 1.15以上版本监听443端口直接写listen 443 ssl,旧写法ssl on已经废弃。修改配置之后执行nginx -t校验语法,校验通过再执行systemctl restart nginx或者nginx -s reload加载配置。
Apache配置逻辑和Nginx不一样,依靠虚拟主机搭配mod_ssl模块。先确认mod_ssl模块已经安装,CentOS系统执行httpd -M | grep ssl验证输出。证书、证书链、私钥放到安全目录,Apache配置文件使用SSLCertificateFile指定证书路径,SSLCertificateKeyFile指定私钥,证书链单独存放的话,增加SSLCertificateChainFile配置。老版本Apache需要单独指定证书链,新版本可以合并证书与证书链,视版本而定。修改配置运行apachectl configtest校验,通过后重启服务。
Windows Server使用IIS,操作方式完全不同,不需要手写配置文件。下载IIS格式证书,一般是.pfx文件搭配密码文本。打开IIS管理器,左侧选中服务器名称,中间找到服务器证书双击进入。右侧操作栏点击导入,选中pfx文件,输入配套密码,证书导入系统证书存储。回到IIS管理器,展开网站,选中目标站点右键编辑绑定,弹窗点击添加,类型选择https,端口443,SSL证书下拉选中刚刚导入的证书,保存。整套操作不用重启服务器,绑定完成直接访问域名验证效果。
宝塔面板是另一套可视化流程,底层操作被封装,上手简单。登录面板进入网站菜单,选中站点点击设置,切换SSL标签页。左侧两个输入框,证书(PEM格式)、私钥(KEY格式)。记事本打开证书文件,全选复制粘贴到第一个输入框;证书链单独存放的话,紧随站点证书内容粘贴,不要空行。key文件内容复制到第二个输入框。保存之后宝塔自动写入Nginx或者Apache配置并重载,无需手动修改配置。保存之后开启强制HTTPS开关,用户访问http会自动跳转https,不用手写rewrite规则。
证书部署完成之后验证生效状态。浏览器访问https://域名,查看地址栏锁图标。点击锁图标,查看证书信息,核对颁发机构、有效期、绑定域名,信息无误即部署成功。也可以命令行验证,curl -vI https://域名,输出内容查看SSL握手信息。还有SSL Labs的SSL Server Test在线工具,输入域名检测,给出A+到F评级,同时给出优化建议,检查HSTS、老旧协议这类问题。
部署阶段高频故障就几类。证书链不完整是最常见问题,根源是缺少中间证书,回到Nginx、Apache配置补充证书链。域名不匹配,核对证书绑定域名与访问域名是否一致,证书仅包含example.com,访问www.example.com就会报错。443端口无法连通,云服务器优先检查安全组,放行443端口,很多人配置无误但是访问失败,就是安全组没有开放端口。
证书续期也要重视。免费证书有效期大多90天,到期前重新签发替换文件。很多人部署之后不再管理,三个月后网站重新标记不安全,本质就是证书过期。阿里云、腾讯云证书控制台到期前推送通知,收到提醒重新签发,下载替换旧文件,重载服务。如果使用Let’s Encrypt免费证书,certbot工具可以配置自动续期,省去手动操作。宝塔面板申请的Let’s Encrypt证书同样支持自动续签,SSL设置页面找到续签选项。
整套流程拆分成下载文件、上传服务器、修改配置、重载验证四步。初次操作可能耗时半小时,熟悉之后新增域名十分钟就能完成。不用畏惧英文指令和文件后缀,本质就是告知服务器站点凭证与私钥,HTTPS访问时出示证书。部署完成,不安全提示消失,操作就算完成。