nginx – 如何在一个虚拟服务器上使用ssl_verify_client = ON而在另一个虚拟服务器上使用ssl_verify_client = OFF?

我想强制对我的虚拟主机进行ssl客户端验证.但得到“没有发送所需的SSL证书”错误,试图从中获取一些东西.

这是我的测试配置:

# defaults                                                                                                                                                                    
ssl_certificate /etc/certs/server.cer;                                                                                                                                 
ssl_certificate_key /etc/certs/privkey-server.pem;                                                                                                                     
ssl_client_certificate /etc/certs/allcas.pem;                                                                                                                                 

server {                                                                                                                                                                      
    listen 1443 ssl;                                                                                                                                                          
    server_name server1.example.com;                                                                                                                                          
    root /tmp/root/server1;                                                                                                                                                   

    ssl_verify_client off;                                                                                                                                                    
}                                                                                                                                                                             

server {                                                                                                                                                                      
    listen 1443 ssl;                                                                                                                                                          
    server_name server2.example.com;                                                                                                                                          
    root /tmp/root/server2;                                                                                                                                                   

    ssl_verify_client on;                                                                                                                                                     
} 

第一台服务器回复200个http代码,但第二个返回“400错误请求,没有发送所需的SSL证书,nginx / 1.0.4”.

也许,在同一个IP上使用ssl_verify_client是不可能的?我应该将这些服务器绑定到不同的IP,它会解决我的问题吗?

如果要在同一IP地址和端口上使用多个基于名称的虚拟主机(使用SNI),但需要为这些主机设置不同的ssl_verify_client,则需要至少升级到nginx> = 1.0.9.

在较旧的nginx版本中,默认虚拟主机的ssl_verify_client设置用于同一IP端口组合上的所有其他基于名称的虚拟主机.其他一些SSL选项(ssl_verify_depth,ssl_prefer_server_ciphers)也以相同的方式处理.如果绝对无法升级,则使用单独的IP或端口可能是一种解决方法.

注意来自nginx changelog的1.0.9:

*) Bugfix: the "ssl_verify_client","ssl_verify_depth",and
   "ssl_prefer_server_ciphers" directives might work incorrectly if SNI
   was used.

nginx源中的相关更改:r4034在trunk中,r4246在1.0分支中.

相关文章

文章浏览阅读3.7k次,点赞2次,收藏5次。Nginx学习笔记一、N...
文章浏览阅读1.7w次,点赞14次,收藏61次。我们在使用容器的...
文章浏览阅读1.4k次。当用户在访问网站的过程中遇到404错误时...
文章浏览阅读2.7k次。docker 和 docker-compose 部署 nginx+...
文章浏览阅读1.3k次。5:再次启动nginx,可以正常启动,可以...
文章浏览阅读3.1w次,点赞105次,收藏182次。高性能:Nginx ...