Nginx、Tomcat、SSL、双向认证

1. 证书层级结构

2. 服务器结构

tomcat不要求认证客户端,nginx要求认证客户端

3. tomcat配置注意点

tomcat的服务器证书的CN必须为tomcat_backend

4. nginx配置注意点

使用openssl从pfx文件中导出pem格式公钥


1

openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem

使用openssl从pfx文件中导出pem格式私钥


1

openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem

使用openssl生成CA证书链
1. 将根CA和中级CA的公钥证书导出,如导出后文件名分别为root.pem ca.pem
2. 将root.pem ca.pem合并成一个文件,ca.pem在前,root.pem在后


1

2

cat ca.pem >> chain.pem

cat root.pem >> chain.pem

nginx server段配置


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

server {

    listen       443;

    server_name  localhost;

    ssl                  on;

    ssl_certificate      nginx服务器证书公钥;

    ssl_certificate_key  nginx服务器证书私钥;

    ssl_session_timeout  5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;

    ssl_ciphers  HIGH:!aNULL:!MD5;

    ssl_prefer_server_ciphers   on;

            ssl_verify_client on; # 开启客户端验证

            ssl_verify_depth 2; # 这里一定要注意,服务器证书上面有几级CA就写几

            ssl_client_certificate chain.pem; # 证书链 用于验证客户端提供的证书

            ssl_trusted_certificate 证书链;

    location / {

                    proxy_pass      https://tomcat_backend;

        include        proxy.conf;

    }

nginx将客户端证书通过http头传递给后端的tomcat。在proxy.conf文件中配置


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header Client-Cert $ssl_client_cert; # 将客户端证书放到http头中传递给后端的tomcat

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

client_max_body_size 10m;

client_body_buffer_size 128k;

proxy_connect_timeout 30;

proxy_send_timeout   15;

proxy_read_timeout   15;

proxy_buffer_size   4k;

proxy_buffers 4 32k;

proxy_busy_buffers_size   64k;

proxy_temp_file_write_size 64k;

proxy_ssl_certificate localhost.pem; # 如果后端的tomcat也要求客户端认证,则nginx与tomcat建立连接时会把该证书发送给tomcat

proxy_ssl_certificate_key localhost.key;

proxy_ssl_trusted_certificate chain.pem; # 如果启用了proxy_ssl_verify,则使用该文件中的CA公钥验证后端tomcat的证书

proxy_ssl_verify on; # nginx是否验证后端tomcat的证书

proxy_ssl_verify_depth 2;

关于如果生成CA证书、客户端证书、服务器证书,请参见 《在JEE项目中实施SSL双向认证》

来自为知笔记(Wiz)

时间: 2024-08-24 21:53:31

Nginx、Tomcat、SSL、双向认证的相关文章

Nginx、SSL双向认证、PHP、SOAP、Webservice、https

本文是1:1模式,N:1模式请参见新的一篇博客<SSL双向认证(高清版)> ----------------------------------------------------- 我是分割线 --------------------------------------------------------- 标题太长了不知道该怎么起,索性就把keyword列出来吧~ WebService的WS-*搞了一天没搞定,看样子PHP应该是彻底抛弃SOAP协议了,google翻烂了也没找到什么靠谱的解

NGINX 配置 SSL 双向认证

对于 NGINX 的 HTTPS 配置,通常情况下我们只需要实现服务端认证就行,因为浏览器内置了一些受信任的证书颁发机构(CA),服务器端只需要拿到这些机构颁发的证书并配置好,浏览器会自己校验证书的可用性并通过 SSL 进行通讯加密. 但特殊情况下我们也需要对客户端进行验证,只有受信任的客户端才能使用服务接口,此时我们就需要启用双向认证来达到这个目的,只有 当客户端请求带了可用的证书才能调通服务端接口 . CA 与自签名 CA 是权威机构才能做的,并且如果该机构达不到安全标准就会被浏览器厂商“封

tomcat配置SSL双向认证

一.SSL简单介绍 SSL(Secure Sockets Layer 安全套接层)就是一种协议(规范),用于保障客户端和服务器端通信的安全,以免通信时传输的信息被窃取或者修改. 怎样保障数据传输安全?  客户端和服务器端在进行握手(客户端和服务器建立连接和交换参数的过程称之为握手)时会产生一个“对话密钥”(session key),用来加密接下来的数据传输,解密时也是用的这个“对话密钥”,而这个“对话密钥”只有客户端和服务器端知道.也就是说只要这个“对话密钥”不被破解,就能保证安全. 2. 客户

SSL双向认证(高清版)

介绍了SSL双向认证的一些基本问题,以及使用Nginx+PHP基于它搭建https的Webservice. 之前的方式只是实现1:1的模式,昨天同事继续实现了n:1的模式,这里我再整理记录下. 由于nginx的ssl_client_certificate参数只能指定一个客户端公钥,如果增加一个客户端进行通信就要重新配一个server. n:1的模式是通过CA的级联证书模式实现的,首先自己生成一套CA根级证书,再借助其生成二级证书作为client证书. 此时client私钥签名不仅可以通过对应的c

tomcat https双向认证

没啥可写的,直接看这些博文吧... 注:server.xml 双向认证 注意得配:truststoreFile,单向不用 浏览器客户端p12证书,需要添加到服务器的jks文件中. http://www.blogjava.net/stevenjohn/archive/2012/08/22/385989.html http://www.360doc.com/content/10/0401/23/633992_21237818.shtml http://www.blogjava.net/stevenj

SSL双向认证和SSL单向认证的流程和区别

refs: SSL双向认证和SSL单向认证的区别https://www.jianshu.com/p/fb5fe0165ef2 图解 https 单向认证和双向认证!https://cloud.tencent.com/developer/news/233610 SSL/TLS 双向认证(一) -- SSL/TLS工作原理https://blog.csdn.net/wuliganggang/article/details/78428866 双向认证 SSL 协议要求服务器和用户双方都有证书.单向认证

(备忘)Nginx配置客户端SSL双向认证

对于 NGINX 的 HTTPS 配置,通常情况下我们只需要实现服务端认证就行,因为浏览器内置了一些受信任的证书颁发机构(CA),服务器端只需要拿到这些机构颁发的证书并配置好,浏览器会自己校验证书的可用性并通过 SSL 进行通讯加密. 但特殊情况下我们也需要对客户端进行验证,只有受信任的客户端才能使用服务接口,此时我们就需要启用双向认证来达到这个目的,只有 当客户端请求带了可用的证书才能调通服务端接口 . CA 与自签名 CA 是权威机构才能做的,并且如果该机构达不到安全标准就会被浏览器厂商"封

【密码学】ssl双向认证和单向认证原理

有朋友在搞一个项目,周末有聊到一些安全性的东西,很自然会想起https,但https究竟如何实施,其原理又是什么? 基于ssl,一般的应用都是单向认证,如果应用场景要求对客户来源做验证也可以实现成双向认证. 网上google一下: 为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议.SSL 协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术.SSL 的握手协议非常有效的让客户和服务器之间完成相互

SSL双向认证

之前的方式只是实现1:1的模式,昨天同事继续实现了n:1的模式,这里我再整理记录下. 由于nginx的ssl_client_certificate参数只能指定一个客户端公钥,如果增加一个客户端进行通信就要重新配一个server. n:1的模式是通过CA的级联证书模式实现的,首先自己生成一套CA根级证书,再借助其生成二级证书作为client证书. 此时client私钥签名不仅可以通过对应的client公钥验证,还可通过根证书的公钥进行验证. 看到这里应该豁然开朗了吧,下面简单介绍下具体怎么操作:

webservice ssl双向认证配置

1.在tomcat中安装axis2插件 2.生成证书,用jdk自带的keytool 服务端 keytool -genkey -alias Server -dname "CN=192.168.10.100, OU=JH, O=JH, L=HangZhou, S=ZheJiang, C=CN" -keystore server.keystore -keyalg RSA keytool -export -alias Server -file server.cer -storepass 123