我已经在 startssl.com 上注册,因此为我的域名检索了 4 个文件:
- ssl.密钥-私钥文件
- ssl.crt-证书文件
- ca.pem -根 CA
- 子类1.服务器.ca.pem-1 类中级服务器 CA 证书
要删除密码我做了:
openssl rsa -in ssl.key -out ssl.key.nopwd
然后,我设置了我的 nginx 配置:
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/ssl.crt;
ssl_certificate_key /etc/nginx/ssl/ssl.key.nopwd;
keepalive_timeout 70;
fastcgi_param SSL_VERIFIED $ssl_client_verify;
fastcgi_param SSL_CLIENT_SERIAL $ssl_client_serial;
fastcgi_param SSL_CLIENT_CERT $ssl_client_cert;
fastcgi_param SSL_DN $ssl_client_s_dn;
server_name ***;
root /var/www/***;
}
nginx 重新启动后,我可以通过 https 成功进入我的网站。但现在我想保护我的网站,并只允许使用安装在客户端浏览器中的证书访问它。据我所知,我必须在 nginx 配置中设置它:
ssl_client_certificate etc/nginx/ssl/[WHAT_SHOULD_BE_HERE?]
ssl_verify_client on;
但是我应该指向哪个文件?如何从服务器证书生成客户端证书?
答案1
请查看这个答案。但以下是需要发生的事情的简短版本:
按原样使用
ssl.crt
是不够的,您应该将 ssl.crt + 中间 CA + 根 CA(按此顺序)连接成一个文件,并在ssl_certificate
语句中使用该文件。您需要整合中间 CA + 根 CA客户证书保存在单个文件中并将其添加到
ssl_client_cerificate
声明中。可选但强烈推荐,通过分析变量来设置您需要的客户端证书主题名称(即 CN、O、OU、DC 等)的规则
$ssl_client_s_dn
。我们还强烈建议通过结合中间 CA + 根 CA 来启用 OSCP 装订服务器并将其添加到
ssl_trusted_certificate
语句中,如下所示:ssl_trusted_certificate /etc/nginx/ssl/ocsp-chain.crt; ssl_stapling on; ssl_stapling_verify on;
您可能还希望将证书信息传递给您的 fastcgi 模块:
... fastcgi_param VERIFIED $ssl_client_verify; fastcgi_param DN $ssl_client_s_dn; ...