您现在的位置是:时尚 >>正文
nginx 配置 ssl certificate ssl certificate key
时尚74人已围观
简介打开 /etc/nginx/nginx.conf 或者 /etc/nginx/conf.d/your-site.conf,找到 server 块。你要加的东西就两行:ssl_certificate 和 ...
打开 /etc/nginx/nginx.conf 或者 /etc/nginx/conf.d/your-site.conf,找到 server 块。你要加的东西就两行:ssl_certificate 和 ssl_certificate_key。别小看这两行,配错了 nginx 直接起不来,浏览器给你甩一个 NET::ERR_CERT_AUTHORITY_INVALID,用户扭头就走。
先看一个能跑的最小配置:
server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; location / { root /var/www/html; index index.html; } } ssl_certificate 指向的是证书文件,通常是 .crt 或 .pem 后缀。这个文件里可能不止一张证书——很多 CA 会给你一个 fullchain 文件,里面是你的域名证书加上中间 CA 证书。nginx 从 1.11.0 开始就支持这种拼接格式,直接指向 fullchain 文件就行,不用单独配中间证书。
ssl_certificate_key 指向私钥文件,后缀一般是 .key。这个文件绝对不能泄露。我见过有人把私钥放在网站根目录下,结果被扫描器抓走,整个域名被人拿去签了钓鱼站。私钥文件的权限设成 600,属主是 nginx 进程的运行用户或者 root。
有个细节容易被忽略:ssl_certificate 和 ssl_certificate_key 可以在 http、server 两个层级配置。如果你有多个域名共用一个泛域名证书,把这两行写在 http 块里更省事。但不同域名用不同证书的时候,还是老老实实写在各自的 server 块里。
配完之后 nginx -t 测试一下。常见报错就那几种:cannot load certificate 说明路径写错了或者文件不存在;PEM_read_bio_X509_AUX() failed 说明证书格式不对,可能你把 DER 格式的文件直接扔进去了;key values mismatch 最坑,证书和私钥不匹配——你可能把 A 域名的证书配了 B 域名的私钥。用 openssl x509 -noout -modulus -in cert.crt | md5 和 openssl rsa -noout -modulus -in cert.key | md5 对比一下两个哈希值,不一样就说明配错了。
证书链的问题也值得说一句。有些 CA 给的证书文件只包含你的域名证书,不包含中间证书。nginx 不会自动去补全这条链。浏览器拿到不完整的链,某些情况下会报错,尤其是 Android 上的老版本 WebView。检查方法:openssl s_client -connect example.com:443 -showcerts,看返回的证书数量。只有一张就是缺中间证书。
还有 OCSP Stapling。配了 SSL 之后顺手加上这几行:
ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/nginx/ssl/chain.pem; resolver 8.8.8.8 1.1.1.1 valid=300s; resolver_timeout 5s; ssl_trusted_certificate 指向的 chain.pem 是 CA 的根证书和中间证书集合。没有这个文件的话,OCSP Stapling 不会生效,nginx 日志里会默默记一条警告。效果是浏览器不用自己去 CA 那边查吊销状态,TLS 握手少一个 RTT。
证书续期别忘了。Let's Encrypt 的证书 90 天过期,certbot 会自动改 nginx 配置,但如果你手动配的路径,续期之后文件没变就不用 reload。要是用了 --standalone 模式,续期时 certbot 会临时占用 80 端口,nginx 得先停一下。我一般用 --webroot 模式,续期不影响线上服务,reload 一下 nginx 就行。
最后提一个我踩过的坑:nginx 配置里写了 ssl_certificate 但忘了 listen 443 ssl 里的 ssl 参数。nginx 不会报错,443 端口能通,但走的还是 HTTP 明文。用 curl -v https://example.com 一看,SSL connection 那行根本没出现。这种静默失败最要命,配置改完记得用 curl 或者 openssl s_client 验证一下实际握手行为。
Tags:
上一篇:书源网址json10000个
下一篇:e盾网络验证源码
相关文章
你我贷官方网站
时尚打开你我贷官网,第一眼看到的不是花哨广告,而是一行行借贷产品的利率对比表。这让我想起三年前帮亲戚查资料时误入过这家平台——当时页面还堆满弹窗,如今却干净得像张白纸。从"流量收割"到"信息透明",这转 ...
【时尚】
阅读更多参考文献网站
时尚维基百科的引用列表里躺着三十七个来源,我点了最底下那个,跳转到一个叫“参考文献”的站点。页面是九十年代风格,白底蓝字,没有广告,也没有追踪脚本。加载完只用了零点三秒。我输入论文标题,它吐出一串DOI号 ...
【时尚】
阅读更多直播间视频下载
时尚凌晨两点,我在B站刷到一个UP主上传的演唱会现场视频,画质清晰得能看清吉他手拨弦时指尖的颤动。评论区有人问“怎么下载”,楼主回复“录屏吧,别想别的”。这大概是大多数人的第一反应——用手机自带录屏功能, ...
【时尚】
阅读更多