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

 openssl自制证书进行https访问

 

SSL】错误java.security.UnrecoverableKeyException: Cannot recover key

Spring Boot2中配置HTTPS

 

posted @ 2019-08-25 14:25  八方鱼  阅读(1370)  评论(0编辑  收藏  举报