找一台linux机器, 利用openssl生成根证书,首先修改openssl.cnf配置文件(默认在/etc/pki/tls目录下)
cp /etc/pki/tls/openssl.cnf /etc/pki/CA
cd /etc/pki/CA
vim openssl.cnf
#确保req下存在以下2行(默认第一行是有的,第2行被注释了)
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
#确保req_distinguished_name下没有 0.xxx 的标签,有的话把0.xxx的0. 去掉
#新增最后一行内容 subjectAltName = @alt_names(前2行默认存在)
#新增 alt_names,注意括号前后的空格,IP.x 的数量可以自己加
注意,此处如果是域名要配置DNS.1 = localhost, 此处是ip所以按上述配置
保存退出.
openssl.cnf中会要求部分文件及目录存在:
mkdir -p {certs,crl,newcerts,private}
touch index.txt
echo 00 > serial
生成ca.key并自签署
openssl req -new -x509 -days 365 -keyout ca.key -out ca.crt -config openssl.cnf
生成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
使用自签署的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)中使用的文件
通过keytool -genkey alias tomcat生成的.keystore已经过时了,不推荐
openssl pkcs12 -export -inkey server.key -in server.crt -out tomcat.p12 -name ‘tomcat’
当前目录下会生成一个tomcat.p12文件,即证书文件
目前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";
}
}
将生成的ca.crt安装到浏览器端即可,注意选择安装到受信任的根证书颁发机构
OK, 配置成功!有兴趣的自己动手试试吧!