![](/img/trans.png)
[英]Connection to https://mail.google.com refused, apache httpclient
[英]How to establish a one way SSL connection to mail.google.com?
我正在嘗試通過java與mail.google.com建立單向SSL連接。 我認為mail.google.com與gmail相同,因此我使用此處提供的說明為gmail.com創建了證書。
我創建了如下證書:
$ openssl s_client -connect smtp.gmail.com:465
然后我復制了
-----BEGIN CERTIFICATE-----
...
...
-----END CERTIFICATE-----
部分放入名為“ gmail.cert”的文件中。
之后,我使用以下命令創建了自己的密鑰庫,並將密碼設置為“密碼”-
$ keytool -import -alias smtp.gmail.com -keystore simpleKS.jks -file gmail.cert
我使用了此鏈接提供的Java代碼,並進行了一些小的修改:
System.setProperty("javax.net.ssl.trustStore", "simpleKS.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "password");
System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
//connect to google
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslSock = (SSLSocket) factory.createSocket("mail.google.com",443);
System.out.println("Sending request...");
//send HTTP get request
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sslSock.getOutputStream(), "UTF8"));
wr.write("GET /mail HTTP/1.1\r\nhost: mail.google.com\r\n\r\n");
wr.flush();
System.out.println("Reading response...");
// read response
BufferedReader rd = new BufferedReader(new InputStreamReader(sslSock.getInputStream()));
String string = null;
while ((string = rd.readLine()) != null) {
System.out.println(string);
System.out.flush();
}
rd.close();
wr.close();
// Close connection.
sslSock.close();
類文件和密鑰庫(以及所有其他文件)在同一目錄中,因此我很確定查找實際的密鑰庫文件不是問題。
但是,當我執行此代碼時,我得到
Sending request...
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我究竟做錯了什么?
猜猜這是因為每種使用的協議的證書有所不同, 請參閱 。 因此,您可能必須與openssl一起玩才能將證書轉換為用於其他協議。
您的錯誤消息表示相同,因為您僅為smtp.gmail.com提供了證書,所以找不到mail.google.com的證書。
(免責聲明我不是ssl專家,只是試圖指出希望正確的方向)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.