Springboot2.1.5项目配置启用HTTPS

Springboot2.1.5项目配置Https

  • Springboot2.1.5项目配置启用HTTPS
    • 1.openssl生成证书
      • (1) 修改openssl.cnf
      • (2) 生成证书并签名
    • 2.生成keystore
    • 3.项目配置测试
    • 4.浏览器端安装证书

Springboot2.1.5项目配置启用HTTPS

1.openssl生成证书

找一台linux机器, 利用openssl生成根证书,首先修改openssl.cnf配置文件(默认在/etc/pki/tls目录下)

cp /etc/pki/tls/openssl.cnf /etc/pki/CA
cd /etc/pki/CA
vim openssl.cnf

(1) 修改openssl.cnf

#确保req下存在以下2行(默认第一行是有的,第2行被注释了)
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req

#确保req_distinguished_name下没有 0.xxx 的标签,有的话把0.xxx的0. 去掉
Springboot2.1.5项目配置启用HTTPS_第1张图片
#新增最后一行内容 subjectAltName = @alt_names(前2行默认存在)
#新增 alt_names,注意括号前后的空格,IP.x 的数量可以自己加
Springboot2.1.5项目配置启用HTTPS_第2张图片
注意,此处如果是域名要配置DNS.1 = localhost, 此处是ip所以按上述配置

保存退出.
openssl.cnf中会要求部分文件及目录存在:

mkdir -p {certs,crl,newcerts,private}
touch index.txt
echo 00 > serial

(2) 生成证书并签名

生成ca.key并自签署
openssl req -new -x509 -days 365 -keyout ca.key -out ca.crt -config openssl.cnf
Springboot2.1.5项目配置启用HTTPS_第3张图片
生成server.key
openssl genrsa -out server.key 2048

生成证书签名请求(注意这个Common Name也要在openssl.cnf的DNS.x中配置的)
openssl req -new -key server.key -out server.csr -config openssl.cnf
Springboot2.1.5项目配置启用HTTPS_第4张图片
使用自签署的CA,签署server.scr
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config openssl.cnf

server.crt server.key就是web服务器(如nginx)中使用的文件

2.生成keystore

通过keytool -genkey alias tomcat生成的.keystore已经过时了,不推荐

openssl pkcs12 -export -inkey server.key -in server.crt -out tomcat.p12 -name ‘tomcat’
在这里插入图片描述
当前目录下会生成一个tomcat.p12文件,即证书文件

3.项目配置测试

目前springboot2.1.5自带的tomcat配置ssl只支持Http11NioProtocol(默认)和Http11Nio2Protocol,Http11AprProtocol不支持,下面以Http11NioProtocol为例介绍

将生成的tomcat.p12文件放到项目路径下

yml配置

# 证书目录
server:
  ssl:
    key-store: tomcat.p12
    #你之前填好的密码
    key-store-password: llspace
    keyStoreType: PKCS12
    keyAlias: tomcat
  port: 443

配置类

/**
 * 

@filename SSLConfig

*

*

@description ssl配置类

* * @author llspace * @version 1.0 * @since 2019/6/25 10:00 **/ @Configuration public class SSLConfig { @Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() { @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(initHttpConnector()); return tomcat; } /* * 配置默认的http 8080跳转到https 8443 */ private Connector initHttpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(80); connector.setSecure(false); connector.setRedirectPort(443); return connector; } }

创建测试访问接口

/**
 * 

@filename TestController

*

*

@description 测试类

* * @author llspace * @version 1.0 * @since 2019/6/25 10:40 **/ @RestController @RequestMapping("/test") public class TestController { @RequestMapping("/helloHttps") public String helloHttps(){ return "hello https"; } }

4.浏览器端安装证书

将生成的ca.crt安装到浏览器端即可,注意选择安装到受信任的根证书颁发机构
Springboot2.1.5项目配置启用HTTPS_第5张图片

启动项目,浏览器端测试访问
Springboot2.1.5项目配置启用HTTPS_第6张图片

OK, 配置成功!有兴趣的自己动手试试吧!

你可能感兴趣的:(spring,boot)