我想设置 Nginx 以进行 SSL 终止。所有具有有效客户端证书的请求都将在 Nginx 终止,并且请求将转发到后端应用程序。我有以下 Nginx 配置
upstream app {
server app:8080;
}
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/ssl/cert_example_com.crt;
ssl_certificate_key /etc/ssl/cert_example_com.key;
ssl_client_certificate /etc/ssl/ca.crt;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_verify_client on;
location / {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
所有这些证书都是使用私有 CA 生成的,并且客户端配备了证书以连接到后端。
对于/etc/ssl/app_domain_com.crt;
我是否需要包含整个证书链(证书+中级证书+根 CA 证书) 在此文件中还是仅仅是证书?
我尝试了以下内容
/etc/ssl/cert_example_com.crt
仅包含服务器证书。
/etc/ssl/cert_example_com.key
包含服务器密钥。
/etc/ssl/ca.crt
包含中间 CA 证书(不是根 CA)。
并且在客户端
client.crt
仅包含客户端证书。
client.key
包含客户端密钥。
经过测试curl -k --cert client.crt --key client.key --header "Content-Type: application/json" --request POST .....
但出现以下错误
<head><title>400 The SSL certificate error</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The SSL certificate error</center>
<hr><center>nginx/1.19.10</center>
</body>
还尝试了client.crt
包含客户端证书 + 中间 CA + 根 CA(按此顺序)。得到与上述相同的错误。