SSL编程

package jp.go.ssid.sss.common;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyStore;
import java.security.Security;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.util.Iterator;

import javax.net.ssl.SSLSocketFactory;

import com.sun.net.ssl.HostnameVerifier;
import com.sun.net.ssl.HttpsURLConnection;
import com.sun.net.ssl.KeyManagerFactory;
import com.sun.net.ssl.SSLContext;
import com.sun.net.ssl.internal.ssl.Provider;

/**
 * @author hy-he
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
public class TestSSL {

 public static void main(String[] args)throws Exception {
  /*Tomcat.cer文件的路径*/
  String cert_paper = "E:/eclipse2.1/workspace/shikaku/defaultroot/stub/tomcat.cer";
  /** 验证keystore用的密码,此处与制作的时候输入的一致就行 */
  String kpwd = "changeit";
  /** 証明書のkeystore */
  String kstore = "cert_kstore";
  /** 要访问的URL */
  String shujuURL;
  
  URL urlRead = null;
  /** HttpURLConnection */
  HttpURLConnection hCon = null;
  
  
  Security.addProvider(new Provider());
  System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");

  FileInputStream ins = new FileInputStream(cert_paper);
  CertificateFactory cerFactory = CertificateFactory.getInstance("X.509");
  Iterator iter = cerFactory.generateCertificates(ins).iterator();
  ins.close();
  KeyStore keyStore = KeyStore.getInstance("JKS");
  keyStore.load(null, kpwd.toCharArray());

  for (int index = 1; iter.hasNext(); index++) {
   Certificate cert = (Certificate) iter.next();
   keyStore.setCertificateEntry("" + index, cert);
  }

  OutputStream outStream = new BufferedOutputStream(new FileOutputStream(kstore));
  keyStore.store(outStream, kpwd.toCharArray());
  outStream.flush();
  outStream.close();
  java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  System.setProperty("javax.net.ssl.trustStore", kstore);
  
  shujuURL = "https://localhost:8443/StubServ100?system_code=05";
  
  urlRead = new URL(shujuURL);
  hCon = (HttpURLConnection) urlRead.openConnection();

  SSLContext ctx;
  KeyManagerFactory kmf;
  KeyStore ks;
  char[] passphrase = kpwd.toCharArray();
  kmf = KeyManagerFactory.getInstance("SunX509");
  //ソケットプロトコルを実装するSSLContextを作成
  ctx = SSLContext.getInstance("TLS");
  ks = KeyStore.getInstance("JKS");

  ks.load(new FileInputStream(kstore), passphrase);

  kmf.init(ks, passphrase);
  //SSLContextを初期化
  ctx.init(kmf.getKeyManagers(), null, null);

  SSLSocketFactory sslsf = null;

  //SSLContextのSocketFactoryを取得
  sslsf = ctx.getSocketFactory();
  //URLConnectionにSocketFactoryを設定
   ((HttpsURLConnection) hCon).setSSLSocketFactory(sslsf);

  //ホスト名を無視させる
  HostnameVerifier hv = new HostnameVerifier() {
   public boolean verify(String hostname, String certHostname) {
    return true;
   }
  };
  ((HttpsURLConnection) hCon).setHostnameVerifier(hv);

  BufferedReader br = new BufferedReader(new InputStreamReader(hCon.getInputStream(), "UTF-8"));

  String line = "";
  String xmldata = "";
  //XMLデータをStringとして取得
  while ((line = br.readLine()) != null) {
   xmldata = xmldata + line;
  }
  br.close();
  System.out.println(xmldata);
  
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值