您的位置:首页 > 编程语言 > Java开发

spring boot 中启用 https

2017-06-21 12:27 316 查看

获取证书

https 是加密链接. 是需要证书的. 那么证书从哪里取得呢? 在本地测试的时候, 可以自己生成一个 tomcat 的证书, 可以本地测试用.

生成方式配置方式见下面

tool -genkey -v -alias mykey -keyalg RSA -validity 3650 -keystore ./keystore

在yml配置如下

server.port:8443
server.ssl.key-store: classpath:keystore.p12
server.ssl.key-store-password: xxxxx
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat

但是本地生成的证书在生产环境是没法用的. 第三方调用的时候是不 OK 的.
于是, 在阿里云上找到了免费的证书申请.



购买后, 会有邮件发到注册邮箱来认证的. 当然, 这里要注意这个免费的证书只能用在一个域名下.
(不知道为什么用公司邮箱和个人邮箱, 这里给出的认证方式不同. )

spring boot 配置

证书生成好之后, 下载之. 然后放在resources目录下. 和 application.properties 并列.

阿里云这个下载下来默认是pfx 格式的. 按照下面这样配置就行:

server.ssl.key-store=classpath:1111111.pfx
server.ssl.key-store-password=1111111
server.ssl.keyStoreType=PKCS12

因为是生产环境, 需要做 http 自动转到 https. 所以这里不配置端口号.

http 自动转到 https

生产环境上 http 转到 https 是一个很必要的能力. 在 spring boot 的启动类中. 添加如下代码即可 ```

package wang.vchen.handling.config;

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;
/**
* @Auther Vchen
* @Description:
* @Date: 20:56 2017/6/20.
* @Modified:
*/
@Configuration
public class HttpsConfig {

@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory(){//1
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(httpConnector());
return tomcat;
}

@Bean
public Connector httpConnector(){
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);//表示用8080端口来供http访问
connector.setSecure(false);
connector.setRedirectPort(8090);//自动重定向到8090端口
return connector;
}
}

这样就可以实现 HTTPS 了

如果是测试环境的证书,浏览器可能会拦截,说是不安全的,需要将浏览器设置一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: