tomcat、spring boot 中增加 https 证书访问
首先制作证书
windows中使用OpenSSL工具,我使用的是Win64OpenSSL_Light-1_0_2s,下载地址:http://slproweb.com/download/Win64OpenSSL_Light-1_0_2s.exe
制作根证书
1.创建根证书密钥文件(自己做CA)
openssl genrsa -out myca.key 1024
2.创建根证书的申请文件
openssl req -new -key myca.key -out myca.csr -days 365 -config C:\usr\local\ssl\openssl.cfg
3.创建一个自当前日期起为期一年的根证书
openssl x509 -req -days 365 -sha256 -extfile c:\usr\local\ssl\openssl.cfg -extensions v3_ca -signkey myca.key -in myca.csr -out myca.crt
制作service服务端证书
1.创建服务器证书密钥
openssl genrsa -out server.key 1024
2.创建服务器证书的申请文件
openssl req -new -key server.key -out server.csr -config c:\usr\local\ssl\openssl.cfg
3.创建自当前日期起有效期为期一年的服务器证书
openssl x509 -req -days 365 -sha256 -CA myca.crt -CAkey myca.key -CAcreateserial -extfile c:\usr\local\ssl\openssl.cfg -extensions v3_req -in server.csr -out server.crt
4.导出.p12文件
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name "server"
5.将.p12文件导入到keystore jks文件
keytool -importkeystore -v -srckeystore server.p12 -srcstoretype pkcs12 -srcstorepass 11111111 -destkeystore server.keystore -deststoretype jks -deststorepass 11111111
最后将生成的jks文件server.keystore 配置在tomcat安装目录下conf中的server.xml的https连接器中;然后再浏览器中导入根证书myca.crt
注意:在生成服务器证书(第3步)的时候,需要在文件openssl.cfg中配置subjectAltname=@alt_names,否则chrome会出现证书无效的情况
openssl.cfg中的部分配置如下所示,
[alt_names]
IP.1 = 127.0.0.1
IP.2 = 192.168.1.1
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=@alt_names
tomcat中配置
一.将证书复制到tomcat的conf配置文件夹下,本例中是将上面生成服务器证书的最后一步中生成的 server.keystore 证书,复制到conf文件夹下
二.修改tomcat的server.xml配置文件
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" /> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" /> <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" maxThreads="150" SSLEnabled="true" keystoreFile="conf/server.keystore" keystorePass="11111111"> </Connector>
三.修改tomcat的web.xml配置文件,在<web-app></web-app>节中最后添加下面一段配置,
<login-config> <!-- Authorization setting for SSL --> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection> <web-resource-name>SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
spring boot 中配置https访问
首先,将刚刚获取的证书 放在项目根目录
然后修改yml配置文件
server:
port: 8443
tomcat:
port-header: HEAD,PUT,DELETE,OPTIONS,TRACE,COPY,SEARCH,PROPFIND
min-spare-threads: 20
max-threads: 500
uri-encoding: UTF-8
ssl:
key-store: zhangyu.keystore
key-store-type: JKS
key-store-password: 11111111
key-alias: server
注意标黄色背景的key-alias,应该是证书别名,是在上面生成服务器证书中的第5步
否则就会出现
Tomcat错误“Alias name tomcat does not identify a key entry”的错误
参考:
openssl证书添加多个IP
【SSL】错误java.security.UnrecoverableKeyException: Cannot recover key
Spring Boot2中配置HTTPS