SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
1.生成证书
使用JDK的bin目录下的keytool生成,关于keytool简单使用方法如下:
这里只研究其生成证书的方法,生成证书的命令是-genkey,如下:
上面也都解释了每个参数的意思,下面研究其生成:
keytool.exe -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore G:/keystore.p12 -validity 3650
注意:上面的名字与姓氏应该输入的是域名,其他密码需要输入,而且需要记住,其他地区信息可以不写。
代码此将生成名为keystore.p12
的PKCS12密钥库文件,证书别名为tomcat。
2.Springboot中使用上面的证书
将上面的证书复制到项目中,我是放在项目 根路径,如下:
配置application.properties使用SSL:
############################################################
#
# HTTPS相关配置
#
############################################################
server.ssl.key-store:keystore.p12
server.ssl.key-store-password: 111222
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat
当然可以以 ver.ssl.key-store=G:/keystore.p12 的方式指定证书位置。
启动测试:
3.在独立的tomcat中使用SSL配置https访问
这个需要重新生成key,也就是上面的key在独立的tomcat中会报错。
1.再次生成key:
keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "g:\tomcat.keystore"
2.tomcat中server.xml配置SSL访问
<!-- Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the BIO implementation that requires the JSSE
style configuration. When using the APR/native implementation, the
OpenSSL style configuration is required as described in the APR/native
documentation -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="G:/tomcat.keystore"
keystorePass="111222" />
3.启动访问测试:
https访问:
http访问:
4.http的默认端口是80,https默认的端口是443;接下来我们配置tomcat只支持https访问
将http端口请求注释掉即可。
<!--<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"/>-->
<!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>-->