报错信息

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = CN #国家
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = ZheJiang #省份
localityName = Locality Name (eg, city)
localityName_default = HangZhou #城市
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = demo #公司
#此处修改域名或者ip
commonName = *.demo.cn
commonName_max = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
#此处增加域名和ip,不需要域名可以删除,只留ip,ip可以配置多个,只要一个自行删除
DNS.1 = *.demo.cn
IP.1 = 10.10.1.100
IP.2 = 10.10.1.101

创建公钥私钥对

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