本篇内容主要讲解“Spring boot中怎么配置HTTPS自签名证书”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring boot中怎么配置HTTPS自签名证书”吧!
获取SSL证书主要有两种,一种是自己通过工具自动生成,另外一种是通过SSL证书服务商获取,当然了后一种是需要收费的。
本文主要介绍用JDK自带的keytool工具来生成SSL证书。如何查看我们的JDK是否带有keytool工具,只需要windows 控制台输入如下命令
keytool --help
若输出如图1信息,则证明此JDK版本带有keytool工具。
图1
接下来开始生成证书,在命令行终端输入
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
简单说明一下各个参数的含义
1.-storetype 指定密钥仓库类型
2.-keyalg 生证书的算法名称,RSA是一种非对称加密算法
3.-keysize 证书大小
4.-keystore 生成的证书文件的存储路径
5.-validity 证书的有效期
当然了,我们也可以不指定密钥仓库类型,JDK会默认选用JKS, 如
keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 3650
两种都可以,但Oracle推荐使用第一种.
C:\Users\liting.wang>keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RS A -keysize 2048 -keystore keystore.p12 -validity 3650 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: 您的组织单位名称是什么? [Unknown]: 您的组织名称是什么? [Unknown]: 您所在的城市或区域名称是什么? [Unknown]: 您所在的省/市/自治区名称是什么? [Unknown]: 该单位的双字母国家/地区代码是什么? [Unknown]: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确? [否]: 是
执行完上面一行命令后,在你的系统的当前用户目录下会生成一个keystore.p12文件
我们也可以使用下面的命令查看我们证书内容
keytool -list -v -storetype pkcs12 -keystore keystore.p12
C:\Users\liting.wang>keytool -list -v -storetype pkcs12 -keystore keystore.p12 输入密钥库口令: 密钥库类型: PKCS12 密钥库提供方: SunJSSE 您的密钥库包含 1 个条目 别名: tomcat 创建日期: 2017-11-29 条目类型: PrivateKeyEntry 证书链长度: 1 证书[1]: 所有者: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 发布者: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 序列号: 6b628be1 有效期开始日期: Wed Nov 29 18:52:33 CST 2017, 截止日期: Sat Nov 27 18:52:33 CST 2027 证书指纹: MD5: D6:71:F9:ED:11:A7:8A:AB:69:DC:9A:99:E2:4B:94:CE SHA1: 88:E5:A7:1C:77:5E:D9:83:F4:14:76:D2:E3:1F:31:FB:37:29:31:13 SHA256: D6:52:D8:56:A7:07:E6:99:3D:EB:BB:E8:D5:E7:E1:D0:66:B6:AD:D5:BC: 65:01:9D:60:6D:95:BA:CD:63:75:C0 签名算法名称: SHA256withRSA 版本: 3 扩展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 31 84 6B E8 DB 63 6B 5E 63 CE A9 DA C8 72 82 88 1.k..ck^c....r.. 0010: EB F9 71 5B ..q[ ] ] ******************************************* *******************************************
如果你已经有SSL证书,你也可将其导入到keystore里,供Spring Boot使用
keytool -import -alias tomcat -file myCertificate.crt -keystore keystore.p12 -storepass password
将这个文件拷贝到我们项目的resources目录下,与application.properties同一目录,然后修改application.properties文件,添加HTTPS支持。在application.properties中添加如下代码:【似乎无需加classpath,似乎是要放绝对地址】
# Define a custom port instead of the default 8080 server.port = 8443 # Tell Spring Security (if used) to require requests over HTTPS security.require-ssl=true # The format used for the keystore server.ssl.key-store-type:PKCS12 # The path to the keystore containing the certificate server.ssl.key-store=classpath:keystore.p12 # The password used to generate the certificate server.ssl.key-store-password=password # The alias mapped to the certificate server.ssl.key-alias=tomcat
第一行指定https请求访问的端口;
第二行是告诉Spring Security 请求也需要透过HTTPS, 签名文件;
第三行指定密钥仓库类型;
第四行指定密钥仓库路径;
第五行指定签名密码;
第六行是别名。
OK,这样配置完成之后我们就可以通过HTTPS来访问我们的Web了.
以上是针对Spring Boot内嵌Tomcat,如果Local的Tomcat,那应该如何配置呢?
首先到你的Tomcat安装目录的conf目录下找到server.xml配置文件,打开https connector,即将
<!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> -->
去掉注释并修改为
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="${user.home}/keystore.p12" keystorePass="123456" />
其中 keystoreFile="${user.home}/keystore.p12"为SSL证书的路径,keystorePass="123456"为你证书的密码。
以上为Tomcat8.0的配置。
Tomcat9.0跟Tomcat8.0有点不太一样,但原理是一样的,将
<!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" /> </SSLHostConfig> </Connector> -->
去掉注释并修改为:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/keystore.p12" certificateKeystorePassword="123456" certificateKeyAlias="tomcat" type="RSA" /> </SSLHostConfig> </Connector>
其实也就是换了个表达形式而已,换汤不换药。具体可参考TOMCAT9.0的官方配置文档http://tomcat.apache.org/tomcat-9.0-doc/ssl-howto.html。
重启Tomcat Service,如果有看到输出Starting ProtocolHandler ["http-nio-8443"]的log信息,则说明配置成功
图2
这样就可以通过HTTPS来访问我们的Web了
光有HTTPS肯定还不够,很多用户可能并不知道,用户有可能继续使用HTTP来访问你的网站,这个时候我们需要添加HTTP自动重定向到HTTPS的功能,当用户使用HTTP来进行访问的时候自动转为HTTPS的方式。
配置很简单,在入口类中添加相应的重定向Bean就行了,如下:
import org.apache.catalina.Context; import org.apache.catalina.connector.Connector; import org.apache.tomcat.util.descriptor.web.SecurityCollection; import org.apache.tomcat.util.descriptor.web.SecurityConstraint; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ConnectorConfig { @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint securityConstraint = new SecurityConstraint(); securityConstraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); securityConstraint.addCollection(collection); context.addConstraint(securityConstraint); } }; tomcat.addAdditionalTomcatConnectors(getHttpConnector()); return tomcat; } private Connector getHttpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(8080); connector.setSecure(false); connector.setRedirectPort(8443); return connector; } }
这个时候当我们访问http://localhost:8080/SpringBootBase的时候系统会自动重定向到https://localhost:8443/SpringBootBase这个地址上。这里的Connector实际就是server.xml中配置的Tomcat的Connector节点。
同样在conf目录下,打开web.xml,在最后一个的节点后加上
<security-constraint> <web-resource-collection> <web-resource-name>OPENSSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
重启Tomcat Service即可,这个时候当我们访问http://localhost:8080/SpringBootBase的时候Tomcat也会将其自动重定向到
到此,相信大家对“Spring boot中怎么配置HTTPS自签名证书”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。