第22章—开启HTTPS
spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html
码云源码地址:https://gitee.com/jinxiaohang/springboot
一、HTTPS
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。-----------来自百度百科
二、SSL证书生成
通过本地jdk自带的证书生成工具keytool。进入到项目路径下,输入以下命令(需要系统的环境变量配置JDK):
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keystore keystore.p12
步骤如下:
三、配置文件
1、将生成的keystore.p12复制到resource文件下。
2、然后添加配置
server.port=8080
server.ssl.enabled=true
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=123456
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=tomcat
四、HTTP端口转发
1、如果是现在启动项目,访问 http://127.0.0.1:8080 会出现以下问题:
2、当然可以直接访问 https://127.0.0.1:8080 ,或者增加一个配置类,添加以下代码,并需改配置文件
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
} @Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
// Connector监听的http的端口号
connector.setPort(8080);
connector.setSecure(false);
// 监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(8443);
return connector;
}
server.port=8443
可以实现HTTP下的8080端口向HTTPS下的8443端口转发。
3、再次启动,并访问 http://127.0.0.1:8080,它会实现自动跳转。
五、抛异常!!!
如果抛出以下异常:
java.lang.UnsatisfiedLinkError: org.apache.tomcat.jni.SSL.renegotiatePending(J)I
at org.apache.tomcat.jni.SSL.renegotiatePending(Native Method) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13]
at org.apache.tomcat.util.net.openssl.OpenSSLEngine.getHandshakeStatus(OpenSSLEngine.java:1021) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13]
at org.apache.tomcat.util.net.openssl.OpenSSLEngine.wrap(OpenSSLEngine.java:457) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13]
at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:469) ~[na:1.8.0_192]
at org.apache.tomcat.util.net.SecureNioChannel.handshakeWrap(SecureNioChannel.java:440) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13]
at org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel.java:211) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1394) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.13.jar!/:9.0.13]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_192]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_192]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.13.jar!/:9.0.13]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_192]
尝试更换springboot和tomcat的版本,参考:https://zhuanlan.zhihu.com/p/54204871
我使用的springboot:2.1.1.RELEASE,tomcat:9.0.12,可以解决上述问题。
观察启动时输入的日志,他是有提示这样的信息:
2019-11-21 15:25:52.894 INFO 22216 --- [ main] o.a.catalina.core.AprLifecycleListener : An older version [1.2.17] of the APR based Apache Tomcat Native library is installed, while Tomcat recommends a minimum version of [1.2.23]
意思是Apache Tomcat Native library的版本过低,需要升级本地的Apache Tomcat Native library版本。
六、参考
生成证书参考:https://www.cnblogs.com/benwu/articles/4891758.html
最新文章
- grape动态PHP结构(二)——管理后台
- 微软的R语言发行版本MRO及开发工具RTVS
- Yocto开发笔记之《Tip-bitbake常用命令》(QQ交流群:519230208)
- Laravel 5.1 文档攻略 —— Eloquent Collection
- Spring-boot使用Ehcache配置
- Loadrunner 录制成功,但是脚本并没有产生
- 郁闷的Delphi新闻
- ExtJS4 动态生成grid出口excel(纯粹的接待)
- [dsu on tree]【学习笔记】
- 【BZOJ4034】【HAOI2015】树上操作
- Ubuntu 18.04 LTS 常用软件安装杂记
- 浅谈react的初步试用
- 清除eclipse,STS workspace历史记录
- RF
- CoreDNS Plugins --->; hosts
- debian7编译安装tengine添加lua和ldap模块
- Canvas控件最后一蛋——CanvasGroup
- 初窥IM通信协议
- URAL 1741 Communication Fiend(最短路径)
- AC日记——摆花