2012-03-22 73 views
0

我已完成在本地Tomcat中配置SSL。
和異常當我打電話的getOutputStream()當我向https發送https請求時,「無法找到有效的證書路徑到請求的目標」

public static InputStream send(String uri, Map<String, String> queryString, 
      Map<String, String> headers, String method, String reqBody) throws IOException 
    { 
     String body = (reqBody != null ? reqBody : ""); 

     //URL myURL = new URL(addUrlParam(uri, queryString)); 
     URL myURL = new URL(uri); 
     HttpURLConnection httpConn = (HttpURLConnection)myURL.openConnection(); 

     httpConn.setRequestMethod(method); 
     httpConn.setRequestProperty("Content-Length", String.valueOf(body.toString().getBytes().length)); 

     if (headers != null) { 
      for (String key : headers.keySet()) { 
       httpConn.setRequestProperty(key, headers.get(key)); 
      } 
     } 

     httpConn.setDoInput(true); 

     //POST 
     if (!HTTP_GET.equals(method) || body.length() > 0) { 
      httpConn.setDoOutput(true); 
      httpConn.setUseCaches(false); //POST do not use user caches 
      ***httpConn.getOutputStream().write(body.toString().getBytes());*** 
      httpConn.getOutputStream().flush(); 
     } 

     return httpConn.getInputStream(); 
    } 

我怎樣才能解決這個問題被拋出?

在此先感謝!

回答

1

Java需要有效的證書路徑到已知的根CA.如果您嘗試使用自簽名證書訪問站點,則需要將自簽名證書的CA密鑰作爲CA密鑰添加到密鑰庫。假設你的CA證書在文件中cacert.pem,使用keytool如下:

keytool -importcert -file cacert.pem -keystore client.jks -storepass some-password 
+0

我在哪裏可以買到「cacert.pem」? – zxi 2012-03-22 05:39:20

+0

這是我在server.xml中的配置: zxi 2012-03-22 05:50:53

+0

在您可以回答「哪裏可以獲得cacert.pem」之前,您必須知道遠程網站的SSL證書是如何簽署的。這是商業證書嗎?自簽名?其他? – 2012-03-22 17:02:44

相關問題