https协议中相关概念
ssl协议通信设计的文件格式
-
xxx.cer
cer文件被称为证书,包含的公钥。通常会将cer文件导入到通信对方的truststore文件中。在本案例中, -
xxx.keystore、xxx.jks
秘钥库存储文件,其中可以容纳N对秘钥和公钥。可以从该文件中导出cer文件(导出公钥证书) -
xxx.truststore
信任证书存储库,其中仅仅包含的是需要被认证的通信对方的公钥 -
xxx.pfx
微软推出的证书文件,通常提供给浏览器使用,其中既包含了公钥,也包含了私钥。在https的双向认证过程当中,通常需要将该文件加入到浏览器的 “个人-证书存储下”。
tomcat配置https连接
认证分类
单向认证
单向认证是客户端识别服务器的身份,服务器不识别客户端的身份。主要认证流程如下:
- 客户端访问https://127.0.0.01:8443,服务器将存储在keystoreFile公钥返回给浏览器。
- 浏览器辨别公钥是否是可信任的根证书颁发机构颁布的,如果不是,弹出网站链接不安全。如果提前将公钥文件(tomcat.cer)从服务器导出,导入到浏览器的根证书颁发机构中,则不会提示链接不安全。
- 浏览器使用公钥加密某个随机码发送给服务器
- 服务器收到加密后的随机码并使用秘钥解密(非对称加密)
- 后续传输会使用加密后的随机码加密数据进行传输,也就是对称加密。
双向认证
单向认证是客户端识别服务器的身份,服务器识别客户端的身份。主要流程相对于单向流程多了一个,客户端需要发送自己的公钥证书文件给服务器,服务器需要识别证书是否是可信任的机构颁发的。
配置概述
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选项--->内容--->证书--->受信任的根证书办法机构--->导入--->选择文件 注:导入这个选项是为了 浏览器不再提示: “此网站的安全证书有问题 ”