第一步:生成证书
我这里即为服务端又为客户端,所以我生成了五个文件;
1、生成服务器证书库
2、生成客户端证书库
3、从客户端证书库中导出客户端证书
4、从服务器证书库中导出服务器证书
5、生成客户端信任证书库(由服务器证书生成的证书库)
这些证书是由jdk的keytool来生成的,可以参考以下**生成脚本,根据实际情况做必要的修改,注意:服务端的**库参数“CN”必须与服务端的IP地址相同,否则会报错,客户端的任意。
1、生成服务器证书库
keytool -validity 365 -genkey -v -alias server -keyalg RSA -keystore E:\ssl\server.keystore -dname" CN=127.0.0.1,OU=bmsoft,O=bmsoft,L=bm,ST=Beijing,c=sh" -storepass 123456
2、生成客户端证书库
keytool -validity 365 -genkeypair -v -alias client -keyalg RSA -storetype PKCS12 -keystore E:\ssl\client.p12 -dname"CN=client,OU=bmsoft,O=bmsoft,L=bm,ST=Beijing,c=sh" -storepass 123456 -keypass 123456
3、从客户端证书库中导出客户端证书
keytool -export -v -alias client -keystore E:\ssl\client.p12 -storetype PKCS12 -storepass 123456 -rfc -file E:\ssl\client.cer
4、从服务器证书库中导出服务器证书
keytool -export -v -alias server -keystore E:\ssl\server.keystore -storepass 123456 -rfc -file E:\ssl\server.cer
5、生成客户端信任证书库(由服务器证书生成的证书库)
keytool -import -v -alias server -file E:\ssl\server.cer -keystore E:\ssl\client.truststore -storepass 123456
这五步好了后,到指定的文件夹中查看是否有这五个文件
下面是最重要的一步:
将客户端证书导入到服务器证书库(使得服务器信任客户端证书)
keytool -import -v -alias client -file E:\ssl\client.cer -keystore E:\ssl\server.keystore -storepass 123456
第二步:配置web.xml文件
打开应用的web.xml文件,增加配置如下:
<!-- 强制SSL配置,即普通的请求也会重定向为SSL请求 -->
<!-- CONFIDENTIAL: 要保证服务器和客户端之间传输的数据不能够被修改,且不能被第三方查看到
INTEGRAL: 要保证服务器和client之间传输的数据不能够被修改
NONE: 指示容器必须能够在任一的连接上提供数据。(即用HTTP或HTTPS,由客户端来决定) -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern><!-- 全站使用SSL -->
</web-resource-collection>
<user-data-constraint>
<description>SSL required</description>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
第三步:配置Tomcat服务器
打开server.xml找到port=“8443”
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
去掉注释,将内容改为下面的,其中,请注意:keystoreFile和truststoreFile的路径一定要写对,就是你配生成证书的路径,两具一样即可!
<Connector SSLEnabled="true" acceptCount="100" clientAuth="true" disableUploadTimeout="true" enableLookups="false" keystoreFile="E:/ssl/server.keystore" keystorePass="123456" maxThreads="25" port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslProtocol="TLS" truststoreFile="E:/ssl/server.keystore" truststorePass="123456"/>
第四步:然后导入服务端信任证书
谷歌里边的 设置 ,搜索 证书,点击管理证书
点击导入->下一步,如图:
浏览自己存放的地址找到server.cer文件,然后点击下一步,如图:
选择如下图->下一步
按照如下图->完成
弹出警告框->是
弹出下框,代表服务器导入成功
然后查看是否存在,如图:
3、找到存放的路径双击“client.p12”,将服务端给客户端颁发的证书导入到浏览器中。
双击后->下一步
找到存放的路径->下一步
输入生成**时的密码:123456 -> 下一步
按照如下图 -> 下一步
按照如下图 -> 下一步
完成
此时输入http://127.0.0.1:8080/lms/login/login时,会弹出安全证书,点击确认按钮,即可访问,且地址是发生改变,如图:
就可以看到地址发生了变化