首页 帮助中心 SSL证书:Nginx中ssl_certificate和ssl_certificate_key的区别
SSL证书:Nginx中ssl_certificate和ssl_certificate_key的区别
时间 : 2025-04-15 15:06:35 编辑 : 华纳云 阅读量 : 14

  在很多人的ssl证书运维初体验中,配置HTTPS的Nginx总让人头大。不仅得搞清楚什么是证书(CRT)、私钥(KEY)、链、CA、中间证书、完整链……还要对着配置文件 nginx.conf 一顿查阅。其中最容易卡住的一对关键词就是:ssl_certificate和ssl_certificate_key,它们看起来像是“差不多的意思”,甚至新手容易把它们指向同一个文件,结果重启服务直接报错。到底这两个参数分别是干嘛的?它们之间的关系是什么?怎么用才不出错?

  先来一段最常见的Nginx HTTPS配置,这是你常常会在配置文件中看到的样子:

server {
    listen 443 ssl;
    server_name www.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;
    }
}

  这两行看起来只是指向了两个文件,但背后分别代表着 HTTPS 通信中的两个关键角色:公钥证书 和 私钥。

  ssl_certificate:你的网站身份证(公钥证书)

  这个字段指定的是你网站的公钥证书,也就是.crt 文件。它的作用是什么?对外声明身份,告诉用户和浏览器,“这是我的公钥,信不信你自己判断”。当浏览器收到该证书后,会用它去验证 TLS 握手中的签名是否正确。

  包括网站信息:比如域名、有效期、签发机构等,甚至中间证书链。

  文件格式

  通常是 .crt、.pem、.cer 等扩展名。

  可以是单证书,也可以是多个中间证书 + 主证书拼接在一起的“证书链”。

# 查看证书信息
openssl x509 -in example.com.crt -noout -text

  注意:这个证书是公开的,谁都可以拿到,不涉及任何秘密。但它不能单独完成加密通信,需要配合私钥。

  ssl_certificate_key:你手中的私钥

  这个字段指定的是你的私钥文件,也就是 .key 文件。它的作用是什么?用于服务器端解密,当客户端用公钥加密了数据,这里就用私钥解密。用于加签握手数据:让客户端验证“这是你本人”。配合公钥证书形成完整加密体系。

  文件格式:

  通常是 .key、.pem 格式。

  明文私钥(非加密),基于 RSA 或 ECC 等加密算法。

# 查看私钥信息
openssl rsa -in example.com.key -check

  注意:私钥必须保密,泄露后你的网站就有可能被伪造或中间人攻击。

  ssl_certificate 和 ssl_certificate_key 必须匹配——不是配对的公钥+私钥,会报错。

  那么怎么正确的理解两者的关系呢?

  ssl_certificate(公钥证书) 就像你家门口挂的“门牌号”,别人可以看到,知道你是“认证的地址”。

  ssl_certificate_key(私钥) 就是你家的“门钥匙”,只有你自己握在手里,别人不知道。

  如果钥匙和门牌不配对,就会握手失败。

  常见问题和踩坑合集

  1. 公钥和私钥文件写反了?

  写反会导致 Nginx 报错,常见错误:

SSL_CTX_use_PrivateKey_file("...") failed

  2. 用了别人的私钥?

  这就像别人把门牌号发你,你把自己的钥匙配给他 —— 你根本打不开这家门。

  3. 使用了不完整的证书链?

  有些平台(比如 iOS 或 Safari)会要求提供完整证书链。如果你只用主证书,可能会导致“部分设备无法访问”的问题。

  解决方案:把中间证书拼接到 .crt 文件中,形成完整链。

cat server.crt intermediate.crt > fullchain.crt

  然后这样配置:

ssl_certificate /etc/nginx/ssl/fullchain.crt;

  配置ssl证书是网站安全的重要步骤,HTTPS是基础,但别掉以轻心。虽然ssl_certificate 和 ssl_certificate_key 就是 Nginx 配置文件中两行简单的路径,但背后关乎你的站点安全、用户信任、甚至搜索排名。理解它们的本质,才不会在配置 HTTPS 时掉坑,或者临上线前被“重启失败”搞到怀疑人生。

华纳云 推荐文章
Nginx SSL配置中如何处理301/302重定向? Nginx SSL如何处理HTTPS请求的负载均衡? SSL证书配置错误后的常见问题与解决方案:别让HTTPS成了摆设 SSL证书和Nginx的兼容性问题有哪些 NGINX配置初学者指南及常见问题解答 网站部署ssl证书https证书的好处与优点 Nginx服务器中SSL/TLS握手的过程是怎样的 Nginx服务器中的SSL配置后如何进行测试 Nginx服务器支持哪些类型的SSL证书 Nginx支持的SSL/TLS版本有哪些,如何选择?
活动
客服咨询
7*24小时技术支持
技术支持
渠道支持