使用 nginx 和 startssl 证书设置安全连接

使用 nginx 和 startssl 证书设置安全连接

我已经在 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

请查看这个答案。但以下是需要发生的事情的简短版本:

  1. 按原样使用ssl.crt是不够的,您应该将 ssl.crt + 中间 CA + 根 CA(按此顺序)连接成一个文件,并在ssl_certificate语句中使用该文件。

  2. 您需要整合中间 CA + 根 CA客户证书保存在单个文件中并将其添加到ssl_client_cerificate声明中。

  3. 可选但强烈推荐,通过分析变量来设置您需要的客户端证书主题名称(即 CN、O、OU、DC 等)的规则$ssl_client_s_dn

  4. 我们还强烈建议通过结合中间 CA + 根 CA 来启用 OSCP 装订服务器并将其添加到 ssl_trusted_certificate语句中,如下所示:

    ssl_trusted_certificate /etc/nginx/ssl/ocsp-chain.crt;
    ssl_stapling on;
    ssl_stapling_verify on;
    
  5. 您可能还希望将证书信息传递给您的 fastcgi 模块:

    ...
    fastcgi_param   VERIFIED $ssl_client_verify;
    fastcgi_param   DN $ssl_client_s_dn;
    ...
    

相关内容