进入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
https://blog.csdn.net/jxctx/article/details/45970199
大都是因为maven文件拷贝导致的,maven将resources下文件拷到classes下的时候,为了让文件的符号能够更好的兼容多系统,会将文件内某些缺乏兼容性的字符替换为兼容多系统的字符。然而有时候,类似于jks等二进制文件,对文件进行字符替换后文件格式已变,不符合规定,所以会出现报错的情况。
解决办法:在pom文件中加入以下配置
<build>
<resources>
<resource>
<directory>src/main/resourcesdirectory>
<filtering>falsefiltering>
resource>
resources>
build>
利用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的访问方式。
当客户端改为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的文件。
然后调用接口还是报错:PKIX:unable 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");
即可。