javaWeb项目http转https详细过程记录
前言:
因为数据安全性问题,需要将Web服务协议由http转为https,这里使用Keytool 来生成证书,Keytool 是一个JAVA环境下的安全钥匙与证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore 的文件(受密码保护)中。
(ps:我们可以在java安装的bin目录找到这个keytool.exe程序)
keytool的命令说明:
通过win+R输入cmd,然后输入以下命令: keytool -genkey -help,就会出现如下:
keytool -genkeypair [OPTION]…
命令说明:
-alias 要处理的条目的别名
-keyalg 密钥算法名称
-keysize 密钥位大小
-sigalg 签名算法名称
-destalias 目标别名
-dname 唯一判别名
-startdate 证书有效期开始日期/时间
-ext X.509 扩展
-validity 有效天数
-keypass 密钥口令
-keystore 密钥库名称
-storepass 密钥库口令
-storetype 密钥库类型
-providername 提供方名称
-providerclass 提供方类名
-providerarg 提供方参数
-providerpath 提供方类路径
-v 详细输出
-protected 通过受保护的机制的口令
实现过程: (转载自: https://blog.csdn.net/su_zp/article/details/93853054 )
1. 生成秘钥文件
以管理员的身份进入 cmd,在cmd里进入jdk的bin路径下,然后输入 以下命令:keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -keypass 123456 -validity 36600 -keystore E:\key\m.jks -storepass 123456
输入上面命令就会出现如下信息:
您的名字与姓氏是什么?
[Unknown]: 这里输入你的ip,若是服务器的话,就输入域名,后面的信息就随便输入即可
您的组织单位名称是什么?
[Unknown]:
您的组织名称是什么?
[Unknown]:
您所在的城市或区域名称是什么?
[Unknown]:
您所在的省/市/自治区名称是什么?
[Unknown]:
该单位的双字母国家/地区代码是什么?
[Unknown]:
CN=172.172.172.172, OU=x, O=x, L=x, ST=x, C=x是否正确?
[否]: y 这里输入值是让你确认你上面的信息是否正确,若不正确,除了y的其他都可以。输入之后就会重复上面的操作。
执行完成之后就可以在e盘下面的key文件夹下生成一个密钥m.jks
2. 导出证书
命令:keytool -export -alias tomcat -keystore E:\key\m.jks -file E:\key\m.crt -storepass 123456
执行后会出现如下提示:存储在文件 <E:\key\m.crt> 中的证书
3. 客户端导入证书
命令:keytool -import -keystore "%JAVA_HOME%\jre\lib\security\cacerts -file "E:\key\m.crt" -alias tomcat
ps: 参数路径如果带空格,一定要加" ",否则汇报Files错误
执行后
输入密钥库口令: 这里输入的口令必须是changeit; 输入完成后就会出现如下信息,若%JAVA_HOME%\jre\lib\security\目录下没有cacerts,还要再输入一次changeit;
所有者: CN=172.172.172.172, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
发布者: CN=172.172.172.172, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
序列号: 402163bd
有效期开始日期: Fri Feb 24 16:53:06 CST 2017, 截止日期: Tue May 11 16:53:06 CST 2117
证书指纹:
MD5: A8:ED:C3:13:24:F5:D9:7E:E1:AF:B0:BB:B4:8C:EA:EA
SHA1: 6B:69:79:1A:B0:AD:46:E2:98:74:FF:79:22:E6:A4:7B:7F:4E:9D:19
SHA256: B3:23:F5:DD:6E:42:A4:14:CF:6A:9D:83:43:7A:9E:FA:B1:69:24:E5:15:DD:A5:97:BB:94:A5:A9:29:8D:2D:BE
签名算法名称: SHA256withRSA
版本: 3
是否信任此证书? [否]: y 输入y即可
证书已添加到密钥库中
4. 配置tomcat文件
找到tomcat目录下的conf文件下的server.xml;
找到
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
在这个后面加入
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
//如果要修改端口号请注意一起修改其他相同的端口号。
maxThreads="1500"
SSLEnabled="true"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keystoreFile="E:\key\m.jks" 这里是你生成密钥的路径
keystorePass="123456" 这里是你生成密钥时的密码
keyAlias="tomcat" 这里是你设置的别名(记得保持一致)
keystoreType="JKS" />
到这里就配置完了,然后启动tomcat,输入https://您的名字与姓氏:8443/就会出现如下界面
5. 自动将http请求转为https
在apache tomcat中的/conf/web.xml或者项目中 的web.xml文件前面面加上这样一段:
<login-config> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection > <web-resource-name >SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
在浏览器里以http访问tomcat或者项目进会自动跳转到https请求地址。
6. 访问页面,使用IE浏览器访问会出现以下问题
出现此页面的原因是浏览器端需要安装证书(当然,点击转到此页也是可以继续访问的),IE证书安装方式如下:
点击转到此页,进入项目页面,浏览器右上角会有证书错误的提示,如下图
点击查看证书
点击安装证书:
根据实际情况选择,然后点击下一步:
导入证书到受信任的证书颁发机构,下一步
点击完成,开始安装.
点击是,完成安装.
安装完成后重启浏览器,再次访问就不会出现上面的提示页面了
7. 使用chrome访问,会自动导入证书,但是也会出现类似问题,如下图
我们进入Chrome的设置,点击安全
选择管理证书
如果在受信任的证书颁发机构里面没有找到对应的证书,导入相应的证书即可
PS: 证书文件的页面可以下载到,如下图,点击到复制到文件即可下载出来
安装证书后,如果还没有解决, 原因是由于 Chrome停止使用个人自己签署的SSL证书,就是说如果不是权威认证机构颁发的证书,此页面提示会一直存在.
解决方式如下: 详见: https://www.codenong.com/43665243/