Nginx单向认证和双向认证安装配置

对于 nginx 的 HTTPS 配置,通常情况下我们只需要实现服务端认证就行,因为浏览器内置了一些受信任的证书颁发机构(CA),服务器端只需要拿到这些机构颁发的证书并配置好,浏览器会自己校验证书的可用性并通过 SSL 进行通讯加密。但特殊情况下我们也需要对客户端进行验证,只有受信任的客户端才能使用服务接口,此时我们就需要启用双向认证来达到这个目的,只有 当客户端请求带了可用的证书才能调通服务端接口 。这里我们使用自己生成的CA来生成证书。

1.Nginx单向认证的安装配置

参考
https://www.cnblogs.com/zhoulf/p/4040015.html?tdsourcetag=s_pcqq_aiomsg
补充
Nginx.config配置文件

 upstream server_pool {
       server 10.110.26.78:8080;
 }
server {
     listen       443;    //默认端口
     server_name  localhost;
     ssl on;
     ssl_certificate      /etc/nginx/ssl1/server.crt;
     ssl_certificate_key  /etc/nginx/ssl1/server.key;
    
     ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
     ssl_prefer_server_ciphers on;

    location / {
        proxy_pass        http://server_pool;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        root   /usr/share/nginx/html;
        index  index.html index.htm;
   }
}

Tomcat配置文件
         Nginx 反向代理 HTTP 不需要更改 Tomcat 配置。与 HTTP 代理不同的是,这里需要通过更改 tomcat 的配置文件来告诉它前面的 HTTPS 代理。



修改为

配置完成以后直接在浏览器访问https://10.110.28.29:443,如果出现tomcat的欢迎页面则配置完成

2.Nginx双向认证的安装配置

参考
[https://www.zhoufengjie.cn/?p=185&tdsourcetag=s_pcqq_aiomsg]
补充
创建证书的步骤
(1) CA证书生成
(2) 服务器证书的生成
(3) 客户端证书的生成
(4) 将证书转换为浏览器都能识别的 PKCS12 文件

安装配置时注意原作者文中一些命令的引号是否为英文状态,中文状态会报错。
(5) 配置文件
nginx配置文件(修改完之后重启nginx)

server {
    listen 443;
    server_name www.chenyu.cn;
    ssl on;
    ssl_certificate     /etc/nginx/ca/server/server.crt;
    ssl_certificate_key /etc/nginx/ca/server/server.key;
    ssl_client_certificate /etc/nginx/ca/private/ca.crt;
    
    ssl_verify_client on;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    location / {
      proxy_pass http://test03_pool;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      root /usr/share/nginx/html;
      index index.html index.htm;
    }
  }
  upstream test03_pool {
    ip_hash;
    server 192.168.100.1;
  }

Ssl_certificate : 服务器公钥地址
Ssl_certificate_key : 服务器私钥地址
Ssl_client_certificate : CA公钥地址 验证客户端证书是否是同一CA签发
Ssl_verify_client : on 打开双向认证
Tomcat配置 (修改完配置之后,重启 tomcat)



修改为

(6)验证证书是否生效

客户访问 ssl 验证
谷歌浏览器使用 https 访问原有项目 https:// www.chenyu.cn,通过host固定是 Nginx 所在服务器,提示 400 Bad Request(No required SSL certificate was sent):
这是因为 https 双向验证需要客户端安装证书。

windows os 下拿到生成的证书 client.p12,直接双击它,进入 “证书导入向导”:一步一步下一步,最后直接点击 “完成” 按钮完成证书导入。
Nginx单向认证和双向认证安装配置_第1张图片
重启谷歌浏览器,再次访问 https://www.chenyu.cn,浏览器要求我们选择证书:输入密码
Nginx单向认证和双向认证安装配置_第2张图片
选中刚才安装好的那个证书(www.chenyu.cn),点击 “确定”,提示 “隐私设置错误”:
这是因为我们服务器用的是自己签发的证书。选择继续访问,守得云开见月明,终于看到久违了的项目登录页面,成功了:
可以点击浏览器输入框左侧的小锁图标查看我们导入的客户端证书相关信息:
其他:
Nginx单向认证和双向认证安装配置_第3张图片

你可能感兴趣的:(Nginx和Tengine)