速记:安卓Netty部署SSL/TLS和避坑指南
先按照 https://blog.csdn.net/russle/article/details/99086684 方法操作
第一步 生成服务器端私钥和证书仓库命令
keytool -genkey -alias mySrvAlias1 -keysize 2048 -validity 365 -keyalg RSA -dname “CN=localhost” -keypass skeypass123 -storepass sstorepass456 -keystore yqServer.jks
-alias 别名
-keysize 2048 密钥长度2048位(这个长度的密钥目前可认为无法被暴力破解)
-validity 365 证书有效期365天,测试中365就高了,实际生产中我们会冲认证机构获取证书,有效期比较长
-keyalg RSA 使用RSA非对称加密算法
-dname "CN=localhost" 设置Common Name为localhost
-keypass skeypass123 密钥的访问密码为skeypass123
-storepass sstorepass456 密钥库的访问密码为sstorepass456
-keystore sChat.jks 指定生成的密钥库文件为sChata.jks
避坑:
在安卓运行时会出现如下错误:javax.net.ssl.SSLException: Received fatal alert: certificate_unknown
此时检测一下证书文件是否正常被读取,如果是放在assets下,建议先导出再加载
还会遇到如下错误 java.security.KeyStoreException: JKS not found
由于Android无法直接使用 jks 格式的证书,所以需要转换为 bks 格式
参考:https://blog.csdn.net/u014361525/article/details/117835614
工具 Portecle 下载
https://jaist.dl.sourceforge.net/project/portecle/v1.11/portecle-1.11.zip
最后还有SunX509 TrustManagerFactory not available错误
将KeyManagerFactory.getInstance("SunX509");
换成TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());