Nginx客户端SSL身份验证

Modified on: Mon, 11 Nov 2019 15:40:02 +0800

我让Nginx纯粹作为各种Web服务器的代理运行。我们的一位客户要求我们使用客户端证书,并为3台不同的机器提供了3个证书,这些机器将连接到在其中一个代理服务器上运行的Web服务。

在我找到相关的nginx设置并创建了一个站点配置(下面的相关部分)之前从未这样做过

      server {
        listen                  443 ssl; 
        server_name             service.domain.com;
        ssl_certificate         /etc/nginx/ssl/wildcard/server.crt; 
        ssl_certificate_key     /etc/nginx/ssl/wildcard/server.key; 
        ssl_client_certificate  /etc/nginx/ssl/client.certificates/client_package.cer;
        ssl_verify_client on;

我连接了3个客户端证书以及开发人员创建的证书(这个证书是自签名的),他需要在开发过程中访问该站点到上面提到的单个文件中。

客户端现在已尝试访问该网站但无法这样做。作为配置的测试,我从连接的证书文件中删除了开发人员证书,并确认他无法访问该站点。一旦我将他的证书重新添加到连接文件中,他(开发人员)就能够再次正确访问该站点。

我在错误日志上打开了调试级别访问权限,当客户端尝试连接时,我收到以下错误。

  

2015/08/13 11:57:41 [info] 27601#0:* 1963客户端在处理SPDY时没有发送所需的SSL证书,客户端:1x.xx.xx.xx,server:service.domain.com,请求:“GET /test.cfm
  HTTP / 1.1“,主持人:”service.domain.com“

从上面的配置中我可以看到,我没有启用SPDY(但我在其他站点上执行),并且客户端确保我们正在发送客户端证书。由于这是我第一次这样做,我想确保在我回去之前说我的日志说你没有发送客户证书之前,我已经把这一切都改正了。

关于发送给我的证书:所有3个都由同一个公共证书颁发机构签名。但是,我没有连接文件中的整个链。什么指南我发现在线提及有根ca,但他们都谈论自签名,这些都不是。所以我不确定是否适用。

为了澄清,我也没有尝试将客户端证书传递给代理服务器。

nginx版本:nginx / 1.8.0
openssl版本:OpenSSL 1.0.1k 2015年1月8日

如果需要更多信息,请告诉我

作者:Drifter104

最佳答案

您的配置实际上是正确的。但是,请确保您不要将实际的客户端证书放入client_package.cer文件中。此文件应仅包含受信任的CA证书,实际上它应包含完整的链。如果他们没有提供,您应该从客户端请求所有根证书和中间证书。

与默认服务器设置相关的陷阱也很少。请阅读本文并确保不影响你。

作者:,dtoubelis

相关问答

添加新评论