Nginx 开启了 SSL 双向验证, weblogic 也开启了双向验证。浏览器访问 Nginx、Nginx 访问 webogic 都需要证书,Nginx 配置如下:
server {
error_log logs/info.log info;
listen 9105 ssl default_server;
server_name 192.168.7.163;
#证书文件
ssl_certificate C:/OpenSSL/bin/server/server-cert.pem;
#私钥文件
ssl_certificate_key C:/OpenSSL/bin/server/server-key.pem;
# 开启 ssl 双向认证
#ssl_client_certificate C:/OpenSSL/bin/test/ca-cert.pem;
ssl_client_certificate C:/OpenSSL/bin/ca/ca-cert.pem;
ssl_verify_client on;
ssl_prefer_server_ciphers on;
#设置长连接
keepalive_timeout 70;
location /portal1 {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_ssl_certificate C:/OpenSSL/bin/test/user-cert.pem;
proxy_ssl_certificate_key C:/OpenSSL/bin/test/user-key.pem;
proxy_set_header X-Forwarded-Proto https;
proxy_ssl_protocols TLSv1 SSLv3;
proxy_http_version 1.1;
proxy_ssl_ciphers DEFAULT:!DH;
proxy_ssl_server_name on;
proxy_ssl_session_reuse off;
proxy_set_header X-SSL-Client-Cert $ssl_client_cert;
proxy_set_header Client-Cert $ssl_client_cert;
proxy_pass https://192.168.7.163:20021/portal;
}
目前问题是:weblogic 端怎样获取浏览器访问 nginx 的证书而不是 Nginx 反向代理 weblogic 时通过如下配置配置的固定的证书
proxy_ssl_certificate C:/OpenSSL/bin/test/user-cert.pem;
proxy_ssl_certificate_key C:/OpenSSL/bin/test/user-key.pem;
java 中获取证书代码如下, 这段代码获取的始终是 Nginx 反向代理配置的证书而不是浏览器访问 Nginx 的证书:
X509Certificate[] certs=(X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");
进行相关搜索后发现目前的 Nginx 不支持将客户端的证书代理给服务端