一 nginx作为客户端与上游的SSL/TLS握手
理解上: nginx作为'客户端',此时类似'浏览器'的角色,发请求建立连接
nginx作为server端与下游进行SSL/TLS握手
① nginx与后端选择什么样的协议
1)如果'nginx与上游'是局域网内,一般通过'http'建立请求,不需要进行'tls'加密
2)nginx与上游需要'ssl/tls握手'场景 --> '正向代理
备注: 一般上游服务是'走公网的合作方'的服务,且对'安全级别'要求较高 -->'CDN'之类的
nginx作为反向代理,当后端为https时的一些细节和原理
(1)nginx作为客户端转发https请求时
① proxy_ssl_ciphers
说明: nginx作为'客户端'自己支持的'加密套件'
② proxy_ssl_server_name
思考:一个ip绑定'多个域名'很常见,为什么'使用off','默认不启用 SNI'呢?
+++++++++++++ "设置off 没有启动SNI现象" +++++++++++++
现象:由于没启用SNI,TLS握手的时候,'上游服务器不知道'用那个域名的证书便使用了'默认'证书返回
说明:当'on'时,在ssl握手时默认'$proxy_host'传给上游服务器,以便'上游服务器'知道用哪个证书
③ proxy_ssl_certificate
说明: nginx作为客户端自己的'客户端证书'
④ proxy_ssl_certificate_key
说明: nginx作为'客户端'自己的'私钥'
⑤ proxy_ssl_password_file
⑥ proxy_ssl_protocols
说明: nginx作为'客户端',发起请求进行'SSL'握手的'TLS'版本
⑦ proxy_ssl_session_reuse
(2)nginx作为客户端校验上游服务器的证书
说明: nginx一般'不校验'上游'证书'的有效性
① proxy_ssl_verify
1)'proxy_ssl_server_name off没有启用SNI',导致TLS握手时候'上游'可能返回一个'默认'证书
2) 虽然'证书返回的不对',但'请求不受影响',HTTPS请求上游时'默认不验证'上游服务器返回的证书
② proxy_ssl_verify_depth
相关参考
③ proxy_ssl_certificate
④ proxy_ssl_trusted_certificate
说明: 用这个'签发证书的CA'去校验'上游'服务器返回的'证书'是否是该'CA'签发的
⑤ proxy_ssl_name
1)'proxy_ssl_server_name on 启用SNI',默认使TLS与'上游'握手时候插入一个'SNI'
2)默认值是'$proxy_host',可以自定义'插入的SNI'
(3)小结