为了账号安全,请及时绑定邮箱和手机立即绑定

nginx+tomcat+双向SSL认证,jsp文件一直不能获取客户端证书信息

nginx+tomcat+双向SSL认证,jsp文件一直不能获取客户端证书信息

喵喵时光机 2019-02-18 18:58:32
certs=(X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate"); 这段永远都是null不知道是哪里问题?nginx?还是tomcat? 网上搜索了不少信息,但是都没有解决,有人直接用tomcat来当https服务器是可以解决,但是我真不想那么做 nginx用http和https打开tomcat的页面都正确了,并且也弹出了证书选择的对话框,但是服务端就是不能获取客户端的认证证书信息 这段是NGINX的配置文件的 http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } } upstream tomcat { server 192.168.2.114:8080 fail_timeout=0; } # HTTPS server # server { listen 443 ssl; server_name localhost; ssl_certificate d:/ssl/server.crt; ssl_certificate_key d:/ssl/server.key; ssl_client_certificate d:/ssl/ca.crt; ssl on; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_verify_client on; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { # note, there is not SSL here! plain HTTP is used client_max_body_size 16m; client_body_buffer_size 128k; proxy_pass http://tomcat/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_next_upstream off; proxy_connect_timeout 30; proxy_read_timeout 300; proxy_send_timeout 300; } } } 这段是tomcat的 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" scheme="https" proxyName="192.168.2.114" proxyPort="443" /> <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" remoteIpProxiesHeader="x-forwarded-by" protocolHeader="x-forwarded-proto"/>
查看完整描述

4 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

在JEE项目中实施SSL双向认证

查看完整回答
反对 回复 2019-03-01
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

转变下思路!
如果你是为了对外(不是nginx和tomcat间)的安全,那么nginx已经替你认证过了,tomcat就不用了。
你取证书是为了取用户名的话,可以在nginx里直接取到$ssl_client_s_dn ,返回建立的SSL连接中客户端证书的DN主题字段,里面是包含用户名的,你直接把这个存到proxy_set_header里,在后面的应用服务器直接取Header就行了。

查看完整回答
反对 回复 2019-03-01
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

老哥你问题解决了没啊?

查看完整回答
反对 回复 2019-03-01
  • 4 回答
  • 0 关注
  • 1040 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号