Seb*_*ber 3 java certificate truststore google-cloud-messaging
我正在尝试通过Google云端消息服务器向Android设备发送推送通知.
我们用来做的URL是:
https://android.googleapis.com/gcm/send
Run Code Online (Sandbox Code Playgroud)
在我们的企业应用程序中,我们不使用默认CA权限,并且出于安全原因,我们在SSLContext属性加载的信任库文件中手动添加我们信任的每个实体.我想将GCM证书添加到我们的信任库.
我不知道如何从该URL获取证书.由于页面重定向到另一个非SSL页面,Chrome/Firefox导出方式似乎无效.
有人有解决方案吗?
如果你有openssl,你可以使用
openssl s_client -connect android.googleapis.com:443
Run Code Online (Sandbox Code Playgroud)
s_client是一个"通用SSL/TLS客户端,使用SSL/TLS连接到远程主机",除此之外,它还打印出从远程服务器收到的服务器证书.它不是HTTP客户端,所以它不知道遵循301重定向,它只会给你连接的初始服务器的证书.
我已经能够通过以下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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
并将它们导入信任库:
keytool -import -alias GoogleInternetAuthority -file myCert1 -keystore truststore
Run Code Online (Sandbox Code Playgroud)