说句实话,现在打开浏览器,要是地址栏没有那把小锁,我第一反应就是这网站不太靠谱。前阵子帮朋友把个人博客从裸HTTP迁到HTTPS,在腾讯云申请免费SSL证书、再配合Nginx做部署,整个过程把常见坑基本踩了一遍。今天就把完整流程写出来,从证书原理讲到申请、配置、排错,需要的朋友可以直接照着操作。不管你是刚买云服务器的小白,还是帮公司站点做HTTPS改造的运维,这篇文章都能给你省下不少查资料的时间。
1. HTTPS与SSL证书:网站“小锁”背后的原理
1.1 HTTP和HTTPS的区别:一个裸奔,一个穿盔甲
很多人对HTTP和HTTPS的理解停留在“多一个S更安全”,这个说法方向没错,但不够具体。HTTP(HyperText Transfer Protocol)是超文本传输协议,它传输的是明文数据,也就是说用户在浏览器里输入的用户名、密码、Cookie,经过网络传输时是直接以原始内容方式在链路上跑的。只要数据包在中间某个环节被截获,里面的信息基本就是“裸奔”状态,可以被直接读出来。
HTTPS(HyperText Transfer Protocol Secure)则是在HTTP和TCP之间加了一层TLS/SSL加密协议。它做的事情可以简单理解为:客户端和服务器在正式传数据之前,先通过“握手”协商出一套会话密钥,之后所有请求和响应都使用这套密钥加密后再传输。即使数据被截获,看到的也是一堆无法解析的密文,没有密钥就无法还原出原始内容。
打个生活化的比方,HTTP像寄明信片,邮递员和沿途所有经手的人都能看到你写了什么;HTTPS像把内容锁进保险箱再寄,只有收件人有钥匙能打开。所以多出来的这个“S”,本质上是给通信加了一层加密保护,这也是为什么涉及登录、支付、个人信息的站点必须使用HTTPS。
对于普通访客来说,HTTPS最直观的体现就是地址栏的“小锁”标识。Chrome等浏览器从2017年前后开始,会把未启用HTTPS的页面直接标记为“不安全”,这对站点信任度的影响是实打实的。如果你的网站还在裸HTTP,近期的浏览器版本大概率已经把它标红警告了。
1.2 SSL证书的加密原理:公钥、私钥和证书链
光说“加密”太笼统,真正让HTTPS跑起来的核心是SSL/TLS证书。很多教程直接让你“申请证书-配置-收工”,但如果不理解证书里到底装了什么,后面遇到问题会非常被动。
SSL证书里最主要的三样东西:公钥、私钥,以及一个由CA(证书颁发机构)做的数字签名。公钥是公开的,放在证书里发给所有访问者;私钥是保密的,只存在于服务器上。这个“公私钥对”的机制,学名叫做非对称加密。它有个特性:用公钥加密的内容只能用私钥解密,反过来私钥加密的内容也只能用公钥验证。
HTTPS握手的简化流程是这样的:
- 客户端(浏览器)发起连接时,服务器把证书(内含公钥)发给客户端。
- 客户端用内置的CA根证书列表去验证这张证书是不是可信CA签发的,域名是否匹配,是否在有效期内。
- 验证通过后,客户端生成一个随机数作为“会话密钥”,用服务器的公钥加密后发给服务器。
- 服务器用自己的私钥解密,得到这个会话密钥。
- 此后双方就用这个对称加密的会话密钥来传输数据,速度远快于非对称加密。
这里有个关键点:为什么浏览器会信任这张证书?因为证书上带的数字签名是由CA的私钥签出来的,而CA的根证书预装在操作系统和浏览器里,浏览器用它来验证签名的真实性。这套信任链条,就叫证书链。
所以证书申请环节才会要求做“域名验证”,目的就是向CA证明“这个域名确实是你控制的”。验证通过后CA才会签发证书。知道了这个原理,你在排错时就能明白:浏览器报“证书不受信任”,八成是证书链配置不全或者证书不是正规CA签的;报“证书域名不匹配”,就是证书CN/SAN字段和访问的域名对不上。
1.3 为什么选腾讯云免费SSL证书:不只是省钱
市面上获取SSL证书的渠道不少,Let‘s Encrypt免费证书、各云厂商的免费证书、收费的企业型OV/EV证书,让人看花眼。我为什么推荐腾讯云的免费证书?最直接的原因是省心。
先从免费和付费的区别说起。免费证书大多是DV(Domain Validation,域名验证型)证书,验证的只是你对域名的控制权,适合个人博客、企业官网、信息展示类站点。而付费证书通常包含OV(Organization Validation,组织验证)和EV(Extended Validation,扩展验证),需要提交企业资质做人工审核,浏览器地址栏会显示公司名称,信任度更高。如果只是普通网站,DV证书完全够用。
腾讯云免费证书的优势有几点。第一,申请流程集成在腾讯云控制台,域名验证走DNS解析(腾讯云域名直接用DNSPod解析),整个流程自动化程度非常高。第二,支持一键部署到腾讯云上的负载均衡、CDN、对象存储等产品,如果你全家桶都用腾讯云,操作极其顺滑。第三,不用自己搭脚本搞自动续期,证书到期前系统会提示,配合DNS验证可以很快续期。
当然,如果你用的是Nginx这类自建服务器,证书还是要手动下载配置的,但申请入口和验证环节腾讯云已经帮你省了很大力气。对于大多数个人站长和中小企业来说,这就是性价比最高的方案。如果你域名在阿里云、服务器在腾讯云,也没关系,证书本身跟域名走,解析验证做一下照样能签发。
2. 腾讯云免费SSL证书申请全流程
2.1 申请前的准备:账号、实名、域名
在点开控制台之前,先把三样东西备好:腾讯云账号、实名认证、域名,以及域名解析的控制权。
腾讯云账号注册没什么好说的,用微信或邮箱就能注册。但注意,申请SSL证书前必须完成账号的实名认证,个人认证或企业认证都可以,不认证的话证书申请按钮是灰的。认证通常几分钟就能通过,个人认证填身份证信息、人脸识别一下就行。
域名这块要分两种情况。第一种是域名就在腾讯云注册,这种情况最省事,域名验证时系统能自动添加DNS解析记录,一键完成。第二种是域名在阿里云、GoDaddy、Namecheap等第三方平台注册,这种需要你手动到对应平台的DNS管理后台去添加解析记录,流程上多一步,但也不复杂。
还要顺带确认一下域名的状态。域名过期未续费、被注册局暂停解析,都会导致证书申请失败或验证不通过。申请之前先确认域名在有效期内,并且解析能正常生效。另外注意,腾讯云免费证书不支持和IP地址绑定,只能给域名签发,必须用域名访问才算合法。
2.2 控制台申请免费证书的完整步骤
准备工作做完,就开始正式申请。整个流程我已经走过好几遍,照着下面步骤操作不会出错。
第一步,打开腾讯云官网,登录后进入控制台。在顶部的搜索框里输入“SSL证书”,点击进入“SSL证书”产品控制台。控制台左侧菜单有“我的证书”、“证书列表”、“订单列表”等入口,申请和管理都在这里。
第二步,点击“申请免费证书”按钮。在证书类型选择页面,免费证书的规格是“TrustAsia DV单域名证书”,这个对个人站点完全够用。确认额度还没用完后,跳到填写信息页面。
第三步,填写证书申请信息。需要填的核心字段包括:证书绑定域名(例如example.com)、申请邮箱、私钥密码(选填,建议不填,除非有特殊要求)。这里有个容易踩坑的细节:免费证书默认只保护一个域名,如果你既想保护example.com,又想保护www.example.com,需要把www.example.com填进去吗?答案是免费DV证书在腾讯云上支持同时添加主域名和www域名作为绑定域名,可以在申请表单里增加域名,但其他子域名(比如blog.example.com)就覆盖不到了。具体以控制台申请页显示为准。
第四步,提交申请后进入域名验证环节。这一步需要你证明自己拥有这个域名,具体的验证方法下一节专门讲。
第五步,验证通过后,证书会进入“已签发”状态。一般几分钟到几小时不等,我实测最快的时候十分钟左右就签下来了,慢的时候因为DNS解析延迟,等了快两小时。
整个申请过程看着环节多,实际操作起来基本是点几页表单的事。真正需要留心的反而是域名验证那一步。
2.3 域名验证的两种方式:DNS验证与文件验证
域名验证是SSL证书申请里最容易被卡住的一环。腾讯云免费证书提供两种验证方式:DNS验证和文件验证。
DNS验证的原理很简单,CA会给你一条特定的DNS解析记录,你把它添加到域名的解析配置中,CA通过查询这条记录来确认你对域名的控制权。具体操作是:在证书申请页面点击“详情”,系统会生成一条记录类型为TXT的解析记录,内容包括主机记录(通常是_dnsauth或类似前缀)和记录值(一串随机字符串)。
如果你的域名在腾讯云解析(DNSPod),页面可以直接点击“自动添加”,系统会帮你把解析记录加上,等生效后点击“验证”按钮即可。域名在第三方平台的话,你需要登录对应平台的DNS管理后台,手动添加一条TXT记录。需要说明的是,有些第三方DNS解析平台对TXT记录生效有缓存延迟,验证太急容易失败,建议添加记录后等1-5分钟再点验证。
文件验证的原理是,CA会让你在网站根目录下放一个指定内容的验证文件,通过HTTP访问该文件来确认网站控制权。操作步骤是:下载系统生成的一个验证文件(比如类似一段随机字符的txt文件),上传到服务器网站根目录下的.well-known/pki-validation/目录里,保证通过http://你的域名/.well-known/pki-validation/文件名.txt能够访问到,然后点击“验证”。
我个人的建议是能用DNS验证尽量用DNS验证,原因有两个:一是文件验证要求服务器网站先能正常访问,如果你是刚买服务器还没部署站点,文件都没地方放;二是DNS记录验证通过后可以直接删掉TXT记录,干净不留痕。文件验证则要记得申请完后把验证文件删掉,不然会留下一个无关的公开入口。大多数情况下,DNS验证是更省心的选择。
2.4 等待签发、下载证书与文件说明
域名验证通过后,CA系统会自动签发证书。你可以在证书列表页面看到证书状态从“待验证”变成“已签发”。这里有个小提醒:即使显示已签发,个别情况下证书需要几分钟时间在CA侧生成和同步,所以刚签发时点“下载”偶尔会提示文件不存在,等一会儿刷新就好。
下载证书时,腾讯云的下载页面会要求选择服务器类型,选项中包含Nginx、Apache、IIS、Tomcat等。这个选择影响的是证书文件的格式和说明文档的组织方式,并非证书内容本身。Nginx和Apache用的是PEM格式,证书文件后缀通常是.crt或.pem;IIS用的是PFX格式;Tomcat则可能需要JKS格式。如果你用的是Nginx,直接选“Nginx”下载。
下载下来的是一个zip压缩包,解压后里面会包含几个关键文件:
- 域名证书文件,比如example.com.crt(或者_bundle.crt),这是服务器证书主体PEM文件。
- 私钥文件,比如example.com.key,这是服务器私钥,非常重要,绝不能泄露。
- 如果压缩包里有_ca.crt这类文件,那是CA证书链文件,某些场景需要配置,Nginx一般把证书链和主证书合并在同一个文件里更稳。
- 还有一份说明文档,告诉你怎么配置——不过说实话,腾讯云生成的那份说明比较简洁,完整配置我建议看后面Nginx章节。
私钥文件特别提醒一句:下载后妥善保存,不要传到Git仓库,不要往公开论坛贴。私钥泄露等于把大门钥匙给了别人,任何人拿到私钥再配合抓到的流量都能解密你的HTTPS内容。密钥管理和密码一样,是需要认真对待的事。
3. Nginx部署HTTPS:从证书上传到强制跳转
3.1 证书文件上传到服务器
证书下载到本地后,下一步就是把相关文件放到服务器上。这步看着简单,但路径规范对后面排查问题影响挺大。
假设你用的是Linux服务器加Nginx环境,建议在服务器上建一个专用目录存放证书文件。我习惯放在/etc/nginx/cert/下面,每套域名建一个子目录,比如/etc/nginx/cert/example.com/。这样做的好处是后续续期、换证书时文件位置清晰,不会出现“不知道证书放哪儿了”的情况。
上传方式看你的习惯。最通用的是scp命令:
scp example.com.crt example.com.key root@你的服务器IP:/etc/nginx/cert/example.com/如果你用宝塔面板这类可视化面板,直接通过面板的文件管理上传到对应目录也行。还有一点容易忽略,就是文件权限。私钥文件(.key)如果权限过于宽松,比如其他用户可读,Nginx有时会拒绝加载,而且本身也是个安全隐患。建议把私钥权限设置为600或640,所属用户为root或nginx运行用户:
chmod 600 /etc/nginx/cert/example.com/example.com.key chmod 644 /etc/nginx/cert/example.com/example.com.crt上传完成后,可以先验证一下证书和私钥是否匹配。用下面命令分别查看证书和私钥的指纹,两者一致才说明匹配:
openssl x509 -noout -modulus -in /etc/nginx/cert/example.com/example.com.crt | openssl md5 openssl rsa -noout -modulus -in /etc/nginx/cert/example.com/example.com.key | openssl md5如果不一致,配置起来Nginx能启动,但浏览器会报错,所以提前验证能少走弯路。
3.2 修改Nginx配置启用HTTPS
证书文件就位后,开始配置Nginx。你需要编辑Nginx的站点配置文件,通常在/etc/nginx/conf.d/或者/etc/nginx/sites-available/目录下。下面是我常用的一个HTTPS站点配置模板:
server { listen 443 ssl http2; server_name example.com www.example.com; ssl_certificate /etc/nginx/cert/example.com/example.com.crt; ssl_certificate_key /etc/nginx/cert/example.com/example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d; root /var/www/example.com; index index.html index.php; location / { # 站点具体配置 } # 其他location配置 }几个关键参数我说一下:
listen 443 ssl http2:让Nginx在443端口监听HTTPS请求,同时开启HTTP/2。HTTP/2能显著提升并发请求效率,所有现代浏览器都支持。ssl_certificate和ssl_certificate_key:分别指向证书文件和私钥文件路径,要注意路径必须正确,Nginx进程对文件有读取权限。ssl_protocols:指定支持的TLS协议版本。建议只保留TLSv1.2和TLSv1.3,把TLSv1.0和TLSv1.1禁用掉,这两个老版本存在已知安全漏洞,业界已经弃用。ssl_ciphers:加密套件列表,推荐使用Mozilla给出的现代兼容配置。这个不用死记,按我上面给的配置就够用。ssl_session_cache和ssl_session_timeout:开启SSL会话缓存,可以减少重复握手的开销,对性能有好处。
配置改完后,先用下面的命令测试配置语法是否正常:
nginx -t如果输出显示test is successful,再执行重载:
nginx -s reload注意,reload不会中断现有连接,是平滑生效的,所以白天操作也不会影响在线用户。
3.3 HTTP自动跳转HTTPS
证书配置好之后,还有一个重要动作要做:让用户从HTTP访问时自动跳转到HTTPS。不然用户手动输入网址时默认走80端口,看到的还是“不安全”的页面,那就等于白整了。
在同一个站点的配置文件中,再加一个server块,专门监听80端口并返回301跳转:
server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }这里的$host会保留用户访问的原始域名,$request_uri保留原始路径,这样无论是直接访问主域名还是带路径的地址,都能无缝跳转到HTTPS版本,而不丢失URL参数。
有人会问用301还是302好,答案是必须301。301是永久重定向,浏览器会缓存这个跳转结果,下次直接访问HTTPS版本,省去了一次请求;302是临时跳转,每次都要先访问HTTP再被引导到HTTPS,白白多一次往返,用户体验也差一截。
配置完同样执行nginx -t和nginx -s reload。然后测试一下:
curl -I http://example.com如果看到返回码是301,且Location字段指向https://开头的地址,说明跳转配置成功。
还有一个细节:如果你之前站点有某些接口、回调地址是写死成HTTP的,做完301跳转后要检查一遍。特别是微信回调、支付通知这类第三方服务,如果它们回调的是HTTP地址,跳转后可能导致回调失败。稳妥的做法是回调地址直接写HTTPS,或者在应用层做兼容处理。
3.4 安全性优化:TLS版本、加密套件与OCSP装订
启用HTTPS不等于万事大吉,想要让站点在安全检测和性能评测里拿高分,还有几个优化点值得做。
第一个是OCSP装订(OCSP Stapling)。OCSP的作用是让浏览器检查证书是否被吊销(比如私钥泄露导致的证书作废)。默认情况下,浏览器每次访问都会向CA的OCSP服务器发送查询请求,这会增加访问时延,而且如果OCSP服务器响应慢,反而会影响用户体验。OCSP装订的做法是让Nginx定期去查询证书状态,并缓存在服务器上,在TLS握手中将这个已签名的状态证明捎带给客户端,浏览器就不需要再单独查询了。
在Nginx配置中加上:
ssl_stapling on; ssl_stapling_verify on; resolver 119.29.29.29 valid=300s; resolver_timeout 5s;resolver配置的DNS服务器用于Nginx解析OCSP服务器域名,填腾讯云DNS或者公共DNS都可以,比如119.29.29.29是腾讯云的DNS。纯自建服务器如果不想依赖外部DNS,也可以填系统自己的,但建议还是配一个稳定的公共DNS。
第二个是禁用不安全的协议。前面配置里已经把TLSv1.0和TLSv1.1排除了,这里再强调一次。现在主流浏览器都已经不支持这两个老协议,保留它们不仅对老用户没帮助,还会拉低安全评分。
第三个是启用HTTP严格传输安全(HSTS)。HSTS的作用是告诉浏览器:这个域名只允许用HTTPS访问,以后所有请求都直接走HTTPS,不再尝试HTTP。加在响应头里:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;这行配置的意思是,让浏览器在一年内都强制使用HTTPS,包括子域名。要注意,HSTS一旦生效,浏览器会强制HTTPS,如果你还没把站内的HTTP资源清理干净,可能会出现部分资源加载不了的问题。所以HSTS建议在站点完全稳定运行HTTPS之后再加。
做完这些优化,网站在浏览器安全面板里基本都能拿到A级评分,对访客来说响应速度也会更快。
4. 常见问题与排错实录
4.1 证书申请被驳回?多半卡在验证环节
证书申请被驳回是新人最容易遇到的事。先说结论:绝大多数驳回都发生在域名验证环节,而不是CA审核环节。
DNS验证失败常见原因有三个。一是TXT解析记录没生效就去点了“验证”,其实记录已经添加了,但DNS缓存还没刷新。这种等5到10分钟再试就行。二是记录值复制不完整,TXT记录值是一长串字符,有些浏览器会强制换行或断行,复制时直接漏掉一段。建议把记录值先粘贴到记事本里,核对无误再往DNS平台填。三是用了第三方DNS但没等缓存过期,有些平台的TXT记录生效时间能达到10分钟以上,点验证太急必然失败。
文件验证失败的常见原因是访问不到验证文件。检查两个点:文件放的路径对不对,二是服务器防火墙或防盗链配置有没有拦截对.well-known目录的访问。很多时候文件放对了,但因为Nginx location规则把这个目录给拦了,导致CA访问不到,这种情况下需要临时放行验证目录。
另外一个容易被忽略的原因是申请了多个免费证书但额度不足。腾讯云免费证书每个账号有额度限制,如果之前申请过一堆测试证书没删,额度会被占满。去证书管理页看看有没有废弃的证书,删掉再申请。
4.2 部署后浏览器仍提示不安全?可能是链没配全或者时间对不上
证书在腾讯云控制台明明显示已签发,Nginx也配置了,浏览器还是提示“不安全”,这个问题我见过太多次了。原因通常有三类。
第一类是证书链不完整。打开浏览器查看证书详情,如果提示“证书不是由受信任的机构颁发的”,基本就是证书链问题。有些证书下载后,主证书文件只包含域名证书本身,没有包含中间CA证书。Nginx配置时ssl_certificate如果只指向了主证书,客户端就无法验证信任链。解决办法是把下载包里的证书链文件(有时候是_ca.crt或_bundle.crt)内容合并到主证书文件里。合并方法很简单,把两个PEM文件内容按顺序拼在一起(主证书在前,CA证书在后):
cat example.com.crt ca.crt > example.com_fullchain.crt然后配置里的ssl_certificate指向合并后的文件。
第二类是服务器系统时间不对。证书的有效期是按服务器当前时间来判断的,如果服务器时间比实际时间快或慢了几小时,刚好卡在证书有效期边界,浏览器就会判定证书无效。执行date看下系统时间,如果不对,用NTP同步一下:
ntpdate ntp.aliyun.com或者干脆启用chrony自动同步,省得以后再次出现这种问题。
第三类是访问的域名和证书绑定域名不一致。证书只保护example.com和www.example.com,你用blog.example.com去访问,浏览器肯定报错。这种情况要么重新申请覆盖子域的证书,要么就用证书中已包含的域名来访问。
这里延伸一个热搜场景:如果用的是第三方云厂商的证书,原理完全一样,只不过申请入口和证书文件下载位置不同,排错思路可以参考这个流程。
4.3 页面出现“混合内容”警告,资源加载不了怎么办
启用HTTPS后,最常见的“后遗症”就是页面报“Mixed Content”错误。这个问题的本质是:页面本身通过HTTPS加载,但页面里引用了一些HTTP协议的资源,比如图片、CSS、JS、接口请求等。浏览器出于安全策略,会阻止这类混合内容的加载,表现为图片裂了、样式错乱、功能异常。
排查混合内容最直接的方法是打开浏览器的DevTools(F12),切换到“Console”标签,浏览器会明确告诉你哪些资源因为Mixed Content被阻止,以及它们的请求地址。通常很快就能定位到是哪几个资源。
修法有几种。首选是把资源地址改成HTTPS。如果资源是相对路径(比如/images/logo.png),那天然跟页面协议一致,不会有问题;如果是写死的http://开头,直接改成https://即可。如果你的网站是WordPress这类CMS,很多插件和主题会把资源地址存在数据库里,这时候可以用工具批量替换URL,把http批量替换成https,但操作前先备份数据库,防止手抖。
另一种做法是在Nginx里做一层代理转发,把对旧地址的请求重写到新地址。但这种方案适合资源量少、临时过渡的场景,不建议长期用。长期跑着代理转发不如把资源源地址一步到位改成HTTPS,性能更好,也更干净。
还有一类容易漏的是接口请求。如果你的前端页面通过AJAX请求HTTP接口,浏览器一样会拦截。这类问题不能简单靠替换URL解决,要么给接口配上证书启用HTTPS,要么就尽可能把所有域名的HTTPS都部署上。
4.4 证书续期与Linux下查看证书过期时间
免费证书的有效期目前基本都是90天左右,到期前需要续期。好消息是腾讯云会在证书到期前通过站内信、短信等方式提醒你,所以只要不是长期不看控制台,基本不会出现证书突然失效的情况。
续期流程和申请流程基本一样。登录SSL证书控制台,找到即将到期的证书,点击“续期”按钮,系统会生成新的证书订单,重新走一遍域名验证流程。因为域名验证方式通常和之前一样,等验证通过后新证书会自动签发。签发后再下载新证书、上传服务器、替换配置、reload Nginx,一套流程再来一遍。第一次做觉得繁琐,但实操熟练后其实十分钟内就能搞定。
如果你服务器上部署的证书比较多,不想总靠人工去盯,可以在Linux服务器上手动查询证书过期时间,做定期巡检甚至写脚本告警。查看本地证书文件过期时间的命令:
openssl x509 -enddate -noout -in /etc/nginx/cert/example.com/example.com.crt输出会显示notAfter=字样,后面的日期就是过期时间点。如果想直接查看线上站点当前使用的证书的过期时间,可以用:
openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate这条命令不需要登录服务器,在本地终端就能跑,非常适合做批量巡检。我习惯写一个简单的shell脚本,循环检查多台服务器,把到期时间少于15天的证书列表打印出来,配合cron定时任务每天执行一次,基本可以告别证书到期突然暴雷的问题。
另外补充一点,很多教程提到免费证书需要手动续期很麻烦,其实如果只是个人博客,把续期时间记在日历上,提前一周续就可以了。我自己更喜欢到期前主动在腾讯云控制台处理,因为线上流程稳妥,不依赖第三方脚本,也不会因为服务器环境变化出错。
5. 总结与个人经验分享
最后再分享几个我在实际操作中积累的小经验,可能不在这类教程的标准流程里,但关键时刻很顶用。
第一,证书文件备份一定要做。我建议每签下来一张证书,就把证书文件、私钥文件、申请时候的验证记录统一打包存档。这样做的好处是:如果后续要换服务器、迁移机房,不用重新走验证,直接拿备份文件部署就行。
第二,配置文件里证书路径写绝对路径,不要图省事写相对路径。Nginx的include文件很多,相对路径一旦上下文不同,路径就找不到了。我的习惯是所有证书统一放在一个目录下,配置文件里用绝对路径写死,既清晰又不容易出错。
第三,尽量在同一家云厂商完成域名、DNS、证书、CDN等全套配置。比如域名在腾讯云,证书在腾讯云,DNS解析在DNSPod,那DNS验证、CDN部署都能一键完成,省去大量手动操作的麻烦。如果混用不同厂商,也不是不行,但每次操作都要跳转来跳转去,时间成本其实远超省下的那点差价。
第四,在给第三方系统或APP提供API接口时,更要确保接口域名启用HTTPS且证书可信。现在很多小程序、公众号接口强制要求HTTPS,而且后台都会有证书有效性校验。证书挂了,接口就挂,这种故障往往比页面打不开影响范围大得多。
我自己已经把腾讯云免费SSL证书加Nginx部署这套流程用在了君几个小站点上,稳定跑了快两年,期间只有续期时重新配置过几次,没有遇到过大问题。启用了HTTPS之后,不仅地址栏有了小锁,站点在搜索引擎里的收录和信任度也有提升,对用户来说访问数据也更安全。希望这篇文章能帮你少踩几个坑,顺利把站点的HTTPS跑起来。