Appium Java测试遇SSLHandshakeException 导入自签证书报非X.509错误
问题排查与解决步骤
1. 排查证书文件内容是否混杂私钥
你使用的openssl生成命令会将私钥和证书写入同一个mycert.pem文件,keytool导入时会优先读取文件头部内容,如果先读到私钥块就会抛出「不是X.509证书」的错误。
你可以直接打开mycert.pem文件确认结构:
- X.509证书块被
-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----包裹 - 私钥块被
-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----包裹
2. 提取纯X.509证书文件
如果确认文件同时包含私钥和证书,执行以下命令提取单独的证书文件:
openssl x509 -in mycert.pem -out mycert_only.crt
3. 重新执行证书导入操作
使用提取后的纯证书文件执行导入,注意替换对应路径,默认JRE密钥库路径如下:
$JAVA_HOME/bin/keytool -import -alias mycertificate -keystore $JAVA_HOME/jre/lib/security/cacerts -file mycert_only.crt
提示:JRE默认密钥库的初始密码为
changeit,未修改过密码可直接输入该值。
4. 修复初始SSL握手异常
你最开始遇到的No appropriate protocol报错,除了证书信任问题外,大概率是JDK默认禁用了低版本TLS协议导致,可按如下方式调整:
- 打开JRE安全配置文件:
$JAVA_HOME/jre/lib/security/java.security - 找到
jdk.tls.disabledAlgorithms配置项,移除你需要使用的协议版本(如TLSv1、TLSv1.1),保存后重启测试进程即可。
内容的提问来源于stack exchange,提问作者mzaifquraishi
相关产品推荐
相关产品推荐

