Bootstrap

tomcat配置https

https协议中相关概念

  ssl协议通信设计的文件格式

  • xxx.cer
        cer文件被称为证书,包含的公钥。通常会将cer文件导入到通信对方的truststore文件中。在本案例中,

  • xxx.keystore、xxx.jks
        秘钥库存储文件,其中可以容纳N对秘钥和公钥。可以从该文件中导出cer文件(导出公钥证书)

  • xxx.truststore
        信任证书存储库,其中仅仅包含的是需要被认证的通信对方的公钥

  • xxx.pfx
        微软推出的证书文件,通常提供给浏览器使用,其中既包含了公钥,也包含了私钥。在https的双向认证过程当中,通常需要将该文件加入到浏览器的 “个人-证书存储下”。

tomcat配置https连接

  认证分类

    单向认证

        单向认证是客户端识别服务器的身份,服务器不识别客户端的身份。主要认证流程如下:

  1. 客户端访问https://127.0.0.01:8443,服务器将存储在keystoreFile公钥返回给浏览器。
  2. 浏览器辨别公钥是否是可信任的根证书颁发机构颁布的,如果不是,弹出网站链接不安全。如果提前将公钥文件(tomcat.cer)从服务器导出,导入到浏览器的根证书颁发机构中,则不会提示链接不安全。
  3. 浏览器使用公钥加密某个随机码发送给服务器
  4. 服务器收到加密后的随机码并使用秘钥解密(非对称加密)
  5. 后续传输会使用加密后的随机码加密数据进行传输,也就是对称加密。

    双向认证

        单向认证是客户端识别服务器的身份,服务器识别客户端的身份。主要流程相对于单向流程多了一个,客户端需要发送自己的公钥证书文件给服务器,服务器需要识别证书是否是可信任的机构颁发的。

  配置概述

      tomcat中内置了https协议的支持,默认是没有打开的,需要我们在配置文件中打开https的配置。

      修改$CATALINA_HOME/conf/server.xml,改成一下配置

	<Connector port="8443"
      	   protocol="org.apache.coyote.http11.Http11Protocol"
           maxThreads="150" 
           SSLEnabled="true" 
           scheme="https" 
           secure="true"
           clientAuth="true" 
           sslProtocol="TLSv1.2"  
		   sslEnabledProtocols="TLSv1.2"
           keystoreFile="keys/tomcat.keystore" 
           keystorePass="tomcat" 
           truststoreFile="keys/tomcat.truststore" 
           truststorePass="tomcat"/>

      重要配置说明:

	clientAuth:	这个配置是否重要,通常配置https的时候,这个选项会配置成false,代表的是服务器不需要验证客户端身份信息

	sslProtocol:代表的是ssl的协议版本

	keystoreFile:代表的是秘钥库的路径

	keystorePass:秘钥库的文件的密码

	truststoreFile:代表的是信任文件的地址,双向认证时需要配置,验证客户端的身份时需要用到

	truststorePass:代表的是信任库文件的密码,双向认证时需要配置,验证客户端的身份时需要用到

  使用jdk的keytool工具生成自签证书文件

  • 服务端生成秘钥库(tomcat.keystore)(服务器端执行)

      keytool -genkey -v -alias server -keyalg RSA  -validity 3650 -keystore tomcat.keystore -dname "CN=192.168.233.134,OU=cn,O=cn,L=cn,ST=cn,c=cn" -ext "SAN=IP:192.168.233.133"  -storepass tomcat -keypass tomcat
      
      注:CN:所有者,选择服务器的域名或者ip(很重要)
    
  • 服务器端生成公钥文件(tomcat.cer)(服务器端执行)

      keytool -export -alias server -keystore tomcat.keystore -file tomcat.cer -storepass tomcat
    
  • 客户端生成秘钥库(client.p12)(客户端执行),仅在双向认证时需要

      keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -dname "CN=192.168.233.1,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass client -keypass client
      
      注:CN:所有者,选择客户端域名或者ip(很重要)
    
  • 客户端生成公钥文件(client.cer)(客户端执行),仅在双向认证时需要

      keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass client -rfc -file client.cer
    
  • 服务器端导入客户端的公钥文件(tomcat.truststore)(服务器端执行),仅在双向认证时需要

      keytool -import -v -file  client.cer -keystore  tomcat.truststore -storepass tomcat
    
  • 客户端浏览器导入client.p12到个人证书存储中,仅在双向认证时需要

      工具--->internet选项--->内容--->证书--->个人--->导入--->选择文件--->输入client.p12的密码
    
      注:服务器端会要求客户端提供证书文件,这个位置如果没导入证书文件大到浏览器中,ssl握手会失败。
    
  • 客户端浏览器导入tomcat.cer到受信任的根证书颁发机构,非必须,主要是为了让浏览器不再提示网站不安全

      工具--->internet选项--->内容--->证书--->受信任的根证书办法机构--->导入--->选择文件
    
      注:导入这个选项是为了  浏览器不再提示:  
      “此网站的安全证书有问题 ”
    
;