`
ming_fanglin
  • 浏览: 220751 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
Keystore  与 trustStore
1. 创建 trustStore
顾名思义,trustStore 持有您所信任的 Queue Manager 签名 CA 所颁发的证书。这意味着当 Java/JMS 客户端连接到 Queue Manager 时,它需要将其证书发送给我们作为初始 SSL 握手的一部分。负责处理所有 SSL 通信的 Java Secure Socket Extension (JSSE) 将通过查找 trustStore 来验证刚刚发送的证书。如果无法验证该证书,则连接将被终止。

要创建 trustStore 并导入证书,您可以使用 IBM Key Management 工具,该工具是 Websphere MQ V6 的一部分:

2. 创建 keyStore

连接到 Queue Manager 后,如果您希望创建客户端身份验证,请完成这一部分的操作。如果还未在该通道上指定客户端身份验证,则不需要完成这一部分所描述的操作。

keyStore 在本质上与 trustStore 相同,但它还持有客户端的个人证书,并且 JSSE 需要使用密码访问。实际上,您可以把个人证书添加到刚才创建的 trustStore 中,它既可以用于 trustStore 也可以用于 keyStore,但以前不需要设置的密码现在需要传递给 JSSE,以使它能够访问您的个人证书。
import java.io.BufferedReader;       
import java.io.BufferedWriter;       
import java.io.InputStreamReader;       
import java.io.OutputStreamWriter;       
import java.net.Socket;       
import java.security.cert.CertificateException;       
import java.security.cert.X509Certificate;       
import javax.net.ssl.SSLContext;       
import javax.net.ssl.SSLSocketFactory;       
import javax.net.ssl.TrustManager;       
import javax.net.ssl.X509TrustManager;       
/**     
 * JAVA操作SSL协议,通过Socket访问Https的程序代码例子。     
 *      
 * @author JAVA世纪网(java2000.net)     
 *      
 */      
public class ReadHttpsURL {       
  // 默认的HTTPS 端口       
  static final int HTTPS_PORT = 443;       
  public static void main(String argv[]) throws Exception {       
    // 受访主机       
    String host = "www.google.com";       
    // 受访的页面       
    String url = "/adsense/?sourceid=aso&subid=ZH_CN-ET-AS-ADSBY6&medium=link&hl=zh_CN";       
    // 自定义的管理器       
    X509TrustManager xtm = new Java2000TrustManager();       
    TrustManager mytm[] = { xtm };       
    // 得到上下文       
    SSLContext ctx = SSLContext.getInstance("SSL");       
    // 初始化       
    ctx.init(null, mytm, null);       
    // 获得工厂       
    SSLSocketFactory factory = ctx.getSocketFactory();       
    // 从工厂获得Socket连接       
    Socket socket = factory.createSocket(host, HTTPS_PORT);       
    // 剩下的就和普通的Socket操作一样了       
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));       
    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));       
    out.write("GET " + url + " HTTP/1.0\n\n");       
    out.flush();       
    System.out.println("start   work!");       
    String line;       
    StringBuffer sb = new StringBuffer();       
    while ((line = in.readLine()) != null) {       
      sb.append(line + "\n");       
    }       
    out.close();       
    in.close();       
    System.out.println(sb.toString());       
  }       
}       

/**     
 * 自定义的认证管理类。     
 *      
 * @author JAVA世纪网(java2000.net)     
 *      
 */      
class Java2000TrustManager implements X509TrustManager {       
  Java2000TrustManager() {       
    // 这里可以进行证书的初始化操作       
  }       
  // 检查客户端的可信任状态       
  public void checkClientTrusted(X509Certificate chain[], String authType) throws CertificateException {       
    System.out.println("检查客户端的可信任状态...");       
  }       
  // 检查服务器的可信任状态       
  public void checkServerTrusted(X509Certificate chain[], String authType) throws CertificateException {       
    System.out.println("检查服务器的可信任状态");       
  }       
  // 返回接受的发行商数组       
  public X509Certificate[] getAcceptedIssuers() {       
    System.out.println("获取接受的发行商数组...");       
    return null;       
  }       
}     

分享到:
评论
1 楼 qianzhiyong 2012-09-03  
不错,刚好用到,谢谢!

相关推荐

Global site tag (gtag.js) - Google Analytics