2012-10-22 89 views
1

我想连接到短信网关。我发现了下面的代码。在java中使用自签名证书

public void smsSender(String username, String password, String to, 
     String text) throws IOException { 

    try { 
     String data = "username=" + username + "&password=" + password 
       + "&to=" + to + "&text=" + text; 

     URL url = new URL("https://sendsms.abc.com:1010/sms.php"); 

     HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
     urlc.setRequestMethod("POST"); 
     urlc.setDoOutput(true); 
     urlc.setRequestProperty("Content-type", 
       "application/x-www-form-urlencoded"); 

     BufferedWriter br = new BufferedWriter(new OutputStreamWriter(
       urlc.getOutputStream())); 

     br.write(data); 
     br.flush(); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(
       urlc.getInputStream())); 
     String line; 
     while (null != ((line = rd.readLine()))) { 
      output = line; 
      System.out.println(output); 
     } 

     rd.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

当我尝试使用此方法进行连接时,Eclipse会发送一条错误消息。

无法找到有效的认证路径要求的目标

,我试图访问使用自签名证书的服务器。我是这个领域的新手。我怎么解决这个问题。提前致谢:)

+0

也许这是有用的:http://stackoverflow.com/questions/859111/how-do-i-accept-a-self-signed-certificate-with-a-java-httpsurlconnection –

回答

1

要通过SSL进行远程方法调用,客户端需要信任服务器的证书。正如您所说服务器具有自签名证书,您的客户端需要显式配置为信任证书,否则连接将失败。 要创建一个客户端和服务器的自签名证书之间的信任关系,请按照下述步骤,

  1. 首先,你应该得到你的客户端服务器证书。
    为此,我知道的是,即在浏览器中点击服务器url 并获取服务器的证书并将其导入到浏览器中。可能还有其他获取服务器证书的方式 ,但您必须进行探索。

  2. 现在将公钥作为证书从浏览器导出到 客户端。让它成为server.cer。

  3. 现在,创建客户端密钥库

    的keytool -genkey -alias clientkeys -keyalg RSA -keystore client.keystore -storepass 123456 -keypass 123456 -dname “CN =本地主机,OU = MYOU, O = MYORG,L = MYCITY,S = MYSTATE,C = MY”

  4. 创建客户证书

    密钥工具-export -alias clientkeys -keystore client.keystore -storepass 123456 -file client.cer

  5. 现在,导入服务器证书到客户端信任存储。

    的keytool -import -alias serverCert在 的link由沃纳提供了埃里克森的评论中提及-keystore client.truststore -storepass clientcert -file server.cer

  6. 现在加载客户端密钥库。

让我知道如果事情还不清楚。但我建议你阅读一些与客户端和服务器之间的SSL握手相关的文档。

+0

这将是有帮助的,如果你可以为这些步骤提供一些链接,因为我是新来的。 :) – Chamath

+0

更新了我的答案。看一看。 – Arham

+0

仍存在同样的问题。 **无法找到有效的认证路径到要求的目标** – Chamath