我已经创建了一个用于测试目的的slef签名SSL证书。当我从浏览器中打开https://localhost
时,它工作正常,现在我正在关注this指南,以便在Android中添加我自己的TrustManager
。
当我尝试使用我的机器的IP address
连接到服务器时,它会抛出
javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.10.3 not verified:
虽然我能够使用HostnameVerifier
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
return hostname.trim().equals("192.168.10.3") || hv.verify(hostname, session);
}
};
但我仍然想知道我在这里缺少什么? 我是否仍然使用自定义HostnameVerifier
正确配置?以下是我的输出
证书
I/System.out: ca=C=PK, L=Islamabad, O=Self, OID.1.2.840.113549.1.9.1=#16176D616C6C617564696E71617A6940676D61696C2E636F6D, CN=https://192.168.10.3
我使用以下命令运行openssl
服务器
openssl s_server -key rsa.key -cert allaudin.pem -accept 4000 -WWW
答案 0 :(得分:1)
您可以在自签名SSL证书文件中使用Alternative Names作为IP地址。
我在github上写了一个bash文件,用于生成替代名称中的自签名证书,您可以复制openssl.cnf并自定义您的openssl配置。如果要使用现有的私钥,则bash文件应为:
#!/bin/bash
KEY_FILE="server.key"
#######################################################
## Remove all generated files ##
#######################################################
rm -f server.crt keystore.p12 keystore.jks
#######################################################
## generate x509 certificate ##
#######################################################
openssl req -new -x509 -key $KEY_FILE -sha256 -out server.crt -days 730 -config openssl.cnf
openssl x509 -in server.crt -text -noout
#######################################################
## adding self-signed certificate into jks key store ##
#######################################################
PASSWORD="password"
openssl pkcs12 -export -name test -in server.crt -inkey $KEY_FILE -out keystore.p12 -password "pass:$PASSWORD"
keytool -importkeystore -destkeystore keystore.jks -srckeystore keystore.p12 -srcstorepass $PASSWORD -srcstoretype pkcs12 -alias test -storepass $PASSWORD
#######################################################
## Remove pkcs12 keystore ##
#######################################################
rm -f keystore.p12
使用openssl x509 -in **.crt -text -noout
查看自签名证书文件中是否有其他名称。 server.crt中的替代名称是:
X509v3 Subject Alternative Name:
IP Address:127.0.0.1
AND 根据TestCase提出Android unknown certificate authority已在java8& junit5,如果你想在Android中测试,你需要进行一些转换。