Spring boot 项目 配置https添加服务端客户端证书认证

Spring boot 项目 配置https

 

进入cmd窗口,在jdk的bin目录下面执行

keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore

按照提示进行操作。

然后在项目的配置文件中加入下面的配置

server.port=443

server.ssl.key-store=classpath:server.keystore 

server.ssl.key-alias=tomcat

server.ssl.enabled=true

server.ssl.key-store-password=123456

server.ssl.key-store-type=JKS

 

配置完成后启动,发现Invalid keystore format错误

https://blog.csdn.net/jxctx/article/details/45970199 

大都是因为maven文件拷贝导致的,mavenresources下文件拷到classes下的时候,为了让文件的符号能够更好的兼容多系统,会将文件内某些缺乏兼容性的字符替换为兼容多系统的字符。然而有时候,类似于jks等二进制文件,对文件进行字符替换后文件格式已变,不符合规定,所以会出现报错的情况。

 

解决办法:在pom文件中加入以下配置

<build>
    <resources>
        <resource>
            <!-- 防止JKS被maven错误解析 -->
           
<directory>src/main/resources</directory>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

 

 

 

Spring boot 配置https ssl安全认证,服务端客户端全套证书

 

1.给服务端添加证书(将服务端的服务变为https的访问方式)

利用jdk自带的keytoos创建证书:

进入jdk的bin目录下,执行下面命令

keytool -genkey -v -alias tomcat -keyalg RSA -keystore ./server.keystore -validity 1024

安照提示生成密钥。

-alias tomcat(别名

-keyalg RSA(算法

-validity 365(有效期,天单位

-keystore ./server.keystore (指定生成证书的位置和证书名称

您的名字与姓氏:此处填写项目的域名,如果是本地就写localhost或者127.0.0.1,或者某个ip

会生成server.keystore到当前目录也就是bin目录下。将证书拷贝到项目的resources根目录下,在application.properties中加入

相对应的配置改为自己的配置信息。然后重启项目,即是https的访问方式。

2.客户端会访问服务端的接口,需要根据https的访问

当客户端改为https的请求后,访问服务端的接口,报错Host name '127.0.0.1' does not match the certificate subject provided by the

意为你访问的域名和你访问的服务器的证书的域名不一致,您的名字与姓氏:此处填写项目的域名,如果是本地就写localhost或者127.0.0.1,或者某个ip

生成证书时的域名和访问地址保持一致.

修改之后继续访问接口,报错:unable to find valid certification path to requested target

意为找不到安全证书。刚才jdk生成的证书只是服务端的证书,我们需要根据服务端的证书生成客户端的证书。然后才会允许客户端访问。

 

keytool -export -alias tomcat -storepass topsec123 -file ./server.cer -keystore server.keystore

根据之前生成的服务端证书生成客户端证书server.cer

keytool -import -trustcacerts -alias tomcat -storepass topsec123 -file server.cer -keystore sscacerts

会要求你输入密码,并不是之前设置的密码,而是changeit。

然后将生成的证书导入到jdk的密钥库中,并且会生成一个sscacerts的文件。

         然后调用接口还是报错:PKIXunable to find valid certification path to requested target

    在代码中访问接口前使用

System.setProperty("javax.net.ssl.trustStore", "D:\\Program Files\\Java\\jdk1.8.0_25\\jre\\lib\\security\\servercacerts");

即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章