我有一个对 *.example.com 有效的 SSL 证书。我已能够在 IIS 上为 subdomain.example.com 正确设置此 SSL 证书。
但我在 ubuntu 16.04 服务器和 nginx 上遇到了问题。
我使用 pfx 文件中的开放 SSL 创建了密钥和证书文件。然后向 nginx 添加了示例站点。这是我的 nginx 配置。
server {
listen 443 ssl;
server_name subdomain2.example.com subdomain2.example.com;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.rsa;
root /subdomain2/test;
index index.html;
include /etc/nginx/mime.types;
}
它在浏览器上运行良好。但当我尝试使用 curl 或使用 python 请求库发出请求时,我收到以下错误
无法获取本地发行者证书
如果我在 python 请求库上禁用 ssl 验证,我会得到正确的响应,但我不想禁用此验证。
我究竟做错了什么?
答案1
您还应该在服务器证书文件中连接中间证书。检查这里有关此问题的问答
正如@Martin指出的那样,文件中证书的顺序很重要。TLS 1.1 的 RFC 4346 规定:
这是 X.509v3 证书的序列(链)。发送者的证书必须位于列表的首位。每个后续证书都必须直接认证其前一个证书。
因此顺序为:
1. Your domain's certificate 2. Vendor's intermediate certificate that certifies (1) 3. Vendor's intermediate certificate that certifies (2) ... n. Vendor's root certificate that certifies (n-1). Optional, because it should be contained in client's CA store.
另请检查此 RFC精确定义