报错信息
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names
URL hostname does not match the Common Name (CN)
问题原因
使用ip制作证书时,校验失败,不会去校验ip只校验域名,想要能够校验ip需要在扩展属性中增加ip。
解决办法
1.通过代码实现信任所有。
2.制作可以使用ip的证书。这里主要介绍制作证书的解决办法
ip证书制作方法
安装依赖包,制作前先安装jdk
1 | yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel |
创建证书存放目录
1 | mkdir -p /ssl |
进入目录
1 | cd /ssl |
新建openssl配置文件,openssl.cnf
1 | vim openssl.cnf |
openssl.cnf内容
1 | [req] |
创建公钥私钥对
1 | openssl genrsa -out server.key 2048 |
创建证书请求
1 | openssl req -new -out server.csr -key server.key -config openssl.cnf |
生成证书,20年
1 | openssl x509 -req -days 7300 -in server.csr -signkey server.key -out server.crt -extensions v3_req -extfile openssl.cnf |
将server.crt和server.key放到nginx、tomcat服务器上,这样客户端就可以使用ip访问服务器的api或webservice接口了
证书库jks文件
如果需要证书库jks文件,使用一下方法转换,需要jdk
生成pkcs12文件,用来转jks
1 | openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name "server" |
转换成jks证书库
1 | keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore server.jks |
使用pkcs12格式
1 | keytool -importkeystore -srckeystore server.jks -destkeystore server.jks -deststoretype pkcs12 |