获取证书并将其添加到Java信任库,只有https URL?

我正在尝试通过Google云端消息服务器向Android设备发送推送通知。

我们用来做的URL是:

https://android.googleapis.com/gcm/send 

在我们的企业应用程序中,我们不使用默认CA权限,并且出于安全原因,我们在SSLContext属性加载的信任库文件中手动添加我们信任的每个实体。 我想将GCM证书添加到我们的信任库。

我不知道如何从该URL获取证书。 由于页面重定向到另一个非SSL页面,Chrome / Firefox导出方式似乎无法正常工作。

有人有解决方案吗?

使用Portecle 。 您可以打开目标密钥库,然后使用检查 > 检查SSL / TLS连接 ,输入android.googleapis.com443 ,您就完成了!

我已经能够通过以下Java代码保存证书:

 public void testConnectionTo(String aURL) throws Exception { URL destinationURL = new URL(aURL); HttpsURLConnection conn = (HttpsURLConnection) destinationURL.openConnection(); conn.connect(); Certificate[] certs = conn.getServerCertificates(); System.out.println("nb = " + certs.length); int i = 1; for (Certificate cert : certs) { System.out.println(""); System.out.println(""); System.out.println(""); System.out.println("################################################################"); System.out.println(""); System.out.println(""); System.out.println(""); System.out.println("Certificate is: " + cert); if(cert instanceof X509Certificate) { try { ( (X509Certificate) cert).checkValidity(); System.out.println("Certificate is active for current date"); FileOutputStream os = new FileOutputStream("/home/sebastien/Bureau/myCert"+i); i++; os.write(cert.getEncoded()); } catch(CertificateExpiredException cee) { System.out.println("Certificate is expired"); } } else { System.err.println("Unknown certificate type: " + cert); } } } 

并将它们导入信任库:

 keytool -import -alias GoogleInternetAuthority -file myCert1 -keystore truststore 

如果你有openssl,你可以使用

 openssl s_client -connect android.googleapis.com:443 

s_client是“通用SSL / TLS客户端,使用SSL / TLS连接到远程主机”,除此之外,它还打印出从远程服务器接收的服务器证书。 它不是HTTP客户端,所以它不知道遵循301重定向,它只会给你连接的初始服务器的证书。