我试图通过客户端应用程序通过SSL登录到Web服务器。如何通过SSL从Java客户端进行通信
我不希望通过明文发送用户名和密码,所以我想使用Web服务器提供的SSL证书加密我的流量和随后的REST调用。
到目前为止,我的代码从服务器检索证书,并从中检索公钥。
public void testConnectionTo(String aURL) throws Exception {
URL destinationURL = new URL(aURL);
HttpsURLConnection conn = (HttpsURLConnection) destinationURL
.openConnection();
conn.connect();
Certificate[] certs = conn.getServerCertificates();
for (Certificate cert : certs) {
System.out.println(cert.getPublicKey());
}
这将返回3个不同的RSA公钥。 我使用哪一个,以及如何(在伪代码/代码中)使用此公钥来加密我的出站流量?
如果您使用的是HTTPS,就像使用https://协议访问URL一样,您的流量会自动进行透明加密。你究竟想达到什么目的?获取服务器证书主要是检查你是否接受它们。 – 9000
因此,使用HTTPS,就像我现在一样,在中间攻击中我不会受到攻击? – steam1234322
是的,只要您真的相信服务器提供的证书,并且不接受过时的密码。这里是[2016年由Mozilla提供的密码推荐](https://wiki.mozilla.org/Security/Server_Side_TLS),如果你想要血淋淋的细节。 JVM拥有自己的可信根证书库,并且通常也会咨询您的操作系统的可信CA列表。如果您想成为额外的偏执狂,您可以另外检查连接的证书,如果您认为证书可能受到侵害或知道该证书已被吊销,请关闭连接。 – 9000