11. 利用Tomcat服务器配置HTTPS双向认定

文章目录

Tomcat配置HTTPS

1.启动cmd控制台,进入%JAVA_HOME%/bin目录
    # cd D:\java\jdk1.8.0_144\bin

1.为服务器生成证书

1.利用java的keyTool工具为tomcat生成证书,假定目标机器的域名为"localhost","keystore"文件存放在"D:\WorkSoftWare\java\tomcat\HTTPS\tomcat.keystore"下,口令为"password",使用如下命令
    # keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\WorkSoftWare\java\tomcat\HTTPS\tomcat.keystore -validity 36500
2.文件路径要事先创建好,在指定目录下会生成tomcat.keystore文件
3.转格式
    # keytool -importkeystore -srckeystore D:\WorkSoftWare\java\tomcat\HTTPS\tomcat.keystore -destkeystore D:\WorkSoftWare\java\tomcat\HTTPS\tomcat.keystore -deststoretype pkcs12  

2.为客户端生成证书

1.为浏览器生成证书,以便让服务器来验证它,为了将证书顺利导入IE和Firefox,证书格式应该是PKCS12,因此,使用如下命令生成
    # keytool -genkey -v -alias mykey -keyalg RSA -keystore D:\WorkSoftWare\java\tomcat\HTTPS\mykey.p12
2.mykey为自定义,对应证书存放子"D:\WorkSoftWare\java\tomcat\HTTPS\mykey.p12"目录下,客户端的CN可以是任意值,双击mykey.p12文件,即可将证书导入到客户端(浏览器)
3.转格式
    # keytool -importkeystore -srckeystore D:\WorkSoftWare\java\tomcat\HTTPS\mykey.p12 -destkeystore D:\WorkSoftWare\java\tomcat\HTTPS\mykey.p12 -deststoretype pkcs12

3.让服务器信任客户端证书

1.由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证,由于不能直接将PKCS12格式的证书库导入,必选先把客户端证书导出为一个单独的CER文件,使用如下命令:
    # keytool -export -alias mykey -keystore D:\WorkSoftWare\java\tomcat\HTTPS\mykey.p12 -storetype PKCS12 -storepass password -rfc -file D:\WorkSoftWare\java\tomcat\HTTPS\mykey.cer
2.mykey为自定义与客户端定义的mykey要一致,通过以上,客户端证书就被我们导出到D:\WorkSoftWare\java\tomcat\HTTPS\mykey.cer文件了

4.将该文件导入到服务器的证书库,添加为一个信任证书使用命令如下:

1.命令
    # keytool -import -v -file D:\WorkSoftWare\java\tomcat\HTTPS\mykey.cer -keystore D:\WorkSoftWare\java\tomcat\HTTPS\tomcat.keystore

5.查看证书库

1.通过list命令查看服务器的证书库,可以看到两个证书,一个是服务器证书,一个是受信任的客户端证书,
    # keytool -list -keystore  D:\WorkSoftWare\java\tomcat\HTTPS\tomcat.keystore

6.让客户端信任服务器证书

1.由于是双向SSL认证,客户端也要验证服务端证书。因此,必须把服务器证书添加到浏览器的"受信任的根证书颁发机构",由于不能直接将keystore格式的证书库导入,必须先把服务器证书导出为一个单独的cer文件,使用如下命令
    # keytool -keystore D:\WorkSoftWare\java\tomcat\HTTPS\tomcat.keystore -export -alias tomcat -file D:\WorkSoftWare\java\tomcat\HTTPS\tomcat.cer 
2.通过以上命令,服务器证书被我们导出,到 D:\WorkSoftWare\java\tomcat\HTTPS\文件中,双击tomcat.cer。按照提示安装证书,将证书填入到"受信任的根证书颁发机构" 

7.配置tomcat

1.打开tomcat的conf/server.xml,在Connector附近添加
    <Connector port="8443"
    	   <!--使用Http11NioProtocol类 Tomcat提供了两个SSL实现,一个是JSSE实现,另一个是APR实现。
    	   Tomcat将自动选择使用哪个实现,即如果安装了APR则自动选择APR,否则选择JSSE。
    	   如果不希望让Tomcat自动选择,而是我们自己指定一个实现则可通过protocol定义,APR文件名为tcnative-1.dll。
    	   6.0里没这个dll文件,而7.0里有。换句话说,6.0默认使用JSSE实现,而7.0默认使用APR实现。
    	   弄明白缘由就好办了。由于习惯使用6.0的配置方式(即JSEE实现),因此只要把conf\server.xml里的protocol修改一下就行了-->
    protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" 
		   <!--开启ssl-->
		   SSLEnabled="true" 
		   scheme="https" 
		   <!--安全的-->
		   secure="true" 
		   <!--设置是否双向认证,默认是false,true代表双向认证-->
		   clientAuth="true"
		   <!--TLS认证-->
		   sslProtocol="TLS" 
		   ciphers="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 
						TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
						TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, 
						TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 
						TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
						TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
						TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
						TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
						TLS_ECDHE_RSA_WITH_RC4_128_SHA, 
						TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
						TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
						TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
						TLS_RSA_WITH_AES_128_GCM_SHA256, 
						TLS_RSA_WITH_AES_128_CBC_SHA,
						TLS_RSA_WITH_AES_256_CBC_SHA,
						TLS_RSA_WITH_3DES_EDE_CBC_SHA,
						TLS_RSA_WITH_RC4_128_SHA,
						TLS_RSA_WITH_RC4_128_MD5"
		   <!--服务器证书文件路径--> keystoreFile="D:\WorkSoftWare\java\tomcat\HTTPS\tomcat.keystore"
		   <!--服务器证书密码-->
		   keystorePass="123456"
		   <!--用来验证客户端证书的的根证书,此例子中就是服务器证书--> truststoreFile="D:\WorkSoftWare\java\tomcat\HTTPS\tomcat.keystore"
		   <!--根证书密码-->
		   truststorePass="123456"/>

8.验证

1.导入证书,在谷歌浏览器中搜索证书,找到管理证书,导入生成的mykey.p12文件
2.启动tomcat访问 https:localhost:8843
能看到以下结果即为成功
相关推荐
‍。。。1 小时前
使用Rust实现http/https正向代理
http·https·rust
龙哥说跨境1 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
pk_xz1234563 小时前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强3 小时前
Linux之sed命令详解
linux·运维·服务器
海绵波波1073 小时前
Webserver(4.3)TCP通信实现
服务器·网络·tcp/ip
九河云5 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
Lary_Rock5 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
幺零九零零6 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
云飞云共享云桌面7 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
幺零九零零10 小时前
【C++】socket套接字编程
linux·服务器·网络·c++