linux nginx反向代理后端双向认证应用的实践 搭建测试环境 生成服务端和客户端证书 1 2 3 4 5 6 7 8 9 10 11 # 生成服务器证书,有效时间10年、证书别名为serverkey、生成文件名为server.keystore: $ keytool -genkey -v -alias serverkey -keyalg RSA -keystore server.keystore -validity 3650 # 生成客户端证书,有效时间10年、证书别名为clientkey 、生成文件名为client.p12: $ keytool -genkey -v -alias clientkey -keyalg RSA -storetype PKCS12 -keystore client.p12 -validity 3650 # 根据客户端证书(证书别名是clientkey、文件为client.p12)生成客户端p12证书信任文件,生成文件名为client.cer、密码为123456: $ keytool -export -alias clientkey -keystore client.p12 -storetype PKCS12 -storepass 123456 -rfc -file client.cer # 将信任证书导入到服务器server.keystore中: keytool -import -v -file client.cer -keystore server.keystore 配置Tomcat 1 2 3 4 5 6 7 8 9 10 11 12 13 <!-- 配置tomcat 启用https双向认证--> <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="F:\Download\geosmarter-dup-v6.1-x86_64\jre\jre_windows\bin\server.keystore" keystorePass="123456" truststoreFile="F:\Download\geosmarter-dup-v6.1-x86_64\jre\jre_windows\bin\server.keystore" truststorePass="123456" /> 浏览器测试 导入证书到浏览器 步骤省略。。。 访问应用 浏览器会弹窗让选择对应的证书,选了就可以访问了 Nginx代理配置 1 2 3 # Nginx不支持p12格式证书,把p12转成pem格式,openssl环境自己解决 $ openssl pkcs12 -in client.p12 -out client.pem -nodes $ openssl pkcs12 -nocerts -in client.p12 -out client.key -nodes 1 2 3 4 5 6 7 8 9 10 # nginx增加如下配置 # nginx 本身的协议不关键,我试过了,nginx代理之后走http也是可以访问的。 location **** { # ... proxy_ssl_certificate /usr/local/openresty/nginx/key/client.pem; proxy_ssl_certificate_key /usr/local/openresty/nginx/key/client.key; proxy_ssl_server_name on; # proxy_pass https://xxxxxx.com/; # ... } 启动nginx就可以直接访问了,不需要指定证书。