使用Java自带Keytool导入Https证书
方法(1):【使用第三方工具导入,不推荐】
转换私钥为PKCS#8格式:【需要安装openssl软件】
openssl pkcs8 -topk8 -nocrypt -outform der -in jtwo.me.key -out jtwo.me.tmpfile
下载ImportKey导入工具,参考:http://www.agentbob.info/agentbob/79-AB.html
wget http://www.agentbob.info/agentbob/81/version/default/part/AttachmentData/data/ImportKey.class
导入KEY到Java_KeyStore中:【注意提示的密码】
java ImportKey jtwo.me.tmpfile jtwo.me.pub
然后在以下路径找到JSK文件:
ls ~/keystore.ImportKey
删除没用的tmpfile临时文件:
rm jtwo.me.tmpfile
方法(2):【使用JAVA自带工具导入,推荐】
步骤来自以下网址,可作参考:
http://blog.jgc.org/2011/06/importing-existing-ssl-keycertificate.html
解密私钥,若无密码则跳过【仅针对私钥被加密时操作】
openssl rsa -in host.key -out host_decrypted.key
转码PKCS12格式【JAVA可以直接使用该类型的证书,可以不转JKS文件】
openssl pkcs12 -export -in host.crt -inkey host.key > host.pfx
生成JKS文件【JAVA专用证书类型,如果无法解析PFX格式证书,可以尝试转换】
keytool -importkeystore -srcstoretype pkcs12 -srckeystore host.pfx -destkeystore host.jks
踩坑:
遇到一个奇怪现象,安卓、PC、Mac进入游戏正常,但iPhone白屏,最后查到原因是握手时断开了。
搜索网上的资料说是因为iPhone比较严格,当找不到上游的证书链时,会导致不受信就会断开连接。
所以要把证书提供商的中继证书等相关文件,使用cat
命令合并到自己的公钥中,并生成受信证书。
附注:
HTTPS关键代码如下(以下使用PKCS12编码,需要JKS的话修改KeyStore.getInstance方法就行):
SSLContext sslcontext = SSLContext.getInstance("TLS");
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance("pkcs12");
String keyStorePath = "/data/certificate.pfx";
String keyStorePassword = "importkey";
ks.load(new FileInputStream(keyStorePath), keyStorePassword.toCharArray());
String keyPassword = "importkey";
kmf.init(ks, keyPassword.toCharArray());
sslcontext.init(kmf.getKeyManagers(), null, null);