添加证书:keytool -keystore "C:\Program Files\Java\jdkihu\jre\lib\security\cacerts" -importcert -alias ca12306 -file E:\srca12306\srca.cer
默认密码:changeit
默认密码:changeit
查看证书:keytool -list -alias ca12306 -keystore "C:\Program Files\Java\jdkihu\jre\lib\security\cacerts"
删除证书:keytool -delete -alias ca12306 -keystore "C:\Program Files\Java\jdkihu\jre\lib\security\cacerts"
java https访问总结的代码(不是都能用)
// /**
// * 测试方法.
// * @param args
// * @throws Exception
// */
// public static void main(String[] args) throws Exception {
// // 密码
// String password = "changeit";
// // 密钥库
// String keyStorePath = "C:\\Program Files\\Java\\jdkihu\\jre\\lib\\security\\cacerts";
// // 信任库
// String trustStorePath = "C:\\Program Files\\Java\\jdkihu\\jre\\lib\\security\\cacerts";
// // 本地起的https服务
// String httpsUrl = spec;
// // 传输文本
// initHttpsURLConnection(password, keyStorePath, trustStorePath);
// // 发起请求
// get(httpsUrl);
// }
//
// /**
// * 初始化HttpsURLConnection.
// * @param password
// * 密码
// * @param keyStorePath
// * 密钥库路径
// * @param trustStorePath
// * 信任库路径
// * @throws Exception
// */
// public static void initHttpsURLConnection(String password,
// String keyStorePath, String trustStorePath) throws Exception {
// // 声明SSL上下文
// SSLContext sslContext = null;
// // 实例化主机名验证接口
// HostnameVerifier hnv = new MyHostnameVerifier();
// try {
// sslContext = getSSLContext(password, keyStorePath, trustStorePath);
// } catch (GeneralSecurityException e) {
// e.printStackTrace();
// }
// if (sslContext != null) {
// HttpsURLConnection.setDefaultSSLSocketFactory(sslContext
// .getSocketFactory());
// }
// HttpsURLConnection.setDefaultHostnameVerifier(hnv);
// }
//
// /**
// * 获得SSLSocketFactory.
// * @param password
// * 密码
// * @param keyStorePath
// * 密钥库路径
// * @param trustStorePath
// * 信任库路径
// * @return SSLSocketFactory
// * @throws Exception
// */
// public static SSLContext getSSLContext(String password,
// String keyStorePath, String trustStorePath) throws Exception {
// // 实例化密钥库
// KeyManagerFactory keyManagerFactory = KeyManagerFactory
// .getInstance(KeyManagerFactory.getDefaultAlgorithm());
// // 获得密钥库
// KeyStore keyStore = getKeyStore(password, keyStorePath);
// // 初始化密钥工厂
// keyManagerFactory.init(keyStore, password.toCharArray());
//
// // 实例化信任库
// TrustManagerFactory trustManagerFactory = TrustManagerFactory
// .getInstance(TrustManagerFactory.getDefaultAlgorithm());
// // 获得信任库
// KeyStore trustStore = getKeyStore(password, trustStorePath);
// // 初始化信任库
// trustManagerFactory.init(trustStore);
// // 实例化SSL上下文
// SSLContext ctx = SSLContext.getInstance("TLS");
// // 初始化SSL上下文
// ctx.init(keyManagerFactory.getKeyManagers(),
// trustManagerFactory.getTrustManagers(), null);
// // 获得SSLSocketFactory
// return ctx;
// }
// /**
// * 获得KeyStore.
// * @param keyStorePath
// * 密钥库路径
// * @param password
// * 密码
// * @return 密钥库
// * @throws Exception
// */
// public static KeyStore getKeyStore(String password, String keyStorePath)
// throws Exception {
// // 实例化密钥库
KeyStore ks = KeyStore.getInstance("JKS");
// KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
// // 获得密钥库文件流
// FileInputStream is = new FileInputStream(keyStorePath);
// // 加载密钥库
// ks.load(is, password.toCharArray());
// // 关闭密钥库文件流
// is.close();
// return ks;
// }
//
// /**
// * 发送请求.
// * @param httpsUrl
// * 请求的地址
// * @param xmlStr
// * 请求的数据
// */
// public static void get(String httpsUrl) {
// HttpsURLConnection urlCon = null;
// try {
// urlCon = (HttpsURLConnection) (new URL(httpsUrl)).openConnection();
// urlCon.setDoInput(true);
// urlCon.setDoOutput(true);
// urlCon.setRequestMethod("HEAD");
// System.out.println(urlCon.getResponseCode());
urlCon.setRequestMethod("POST");
urlCon.setRequestProperty("Content-Length",
String.valueOf(xmlStr.getBytes().length));
urlCon.setUseCaches(false);
//设置为gbk可以解决服务器接收时读取的数据中文乱码问题
urlCon.getOutputStream().write(xmlStr.getBytes(charset));
urlCon.getOutputStream().flush();
urlCon.getOutputStream().close();
BufferedReader in = new BufferedReader(new InputStreamReader(
urlCon.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
// } catch (MalformedURLException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// public static void main(String[] args)
// {
// testIt();
// }
//
// private static void testIt(){
//
// String https_url = spec;
// URL url;
// try {
//
// url = new URL(https_url);
// HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
//
// //dumpl all cert info
// print_https_cert(con);
//
// //dump all the content
// print_content(con);
//
// } catch (MalformedURLException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// }
//
// }
//
// private static void print_https_cert(HttpsURLConnection con){
//
// if(con!=null){
//
// try {
//
// System.out.println("Response Code : " + con.getResponseCode());
// System.out.println("Cipher Suite : " + con.getCipherSuite());
// System.out.println("\n");
//
// Certificate[] certs = con.getServerCertificates();
// for(Certificate cert : certs){
// System.out.println("Cert Type : " + cert.getType());
// System.out.println("Cert Hash Code : " + cert.hashCode());
// System.out.println("Cert Public Key Algorithm : "
// + cert.getPublicKey().getAlgorithm());
// System.out.println("Cert Public Key Format : "
// + cert.getPublicKey().getFormat());
// System.out.println("\n");
// }
//
// } catch (SSLPeerUnverifiedException e) {
// e.printStackTrace();
// } catch (IOException e){
// e.printStackTrace();
// }
//
// }
//
// }
//
// private static void print_content(HttpsURLConnection con){
// if(con!=null){
//
// try {
//
// System.out.println("****** Content of the URL ********");
// BufferedReader br =
// new BufferedReader(
// new InputStreamReader(con.getInputStream()));
//
// String input;
//
// while ((input = br.readLine()) != null){
// System.out.println(input);
// }
// br.close();
//
// } catch (IOException e) {
// e.printStackTrace();
// }
//
// }
//
// }
// public static void main(String[] args) throws Exception {
// URL url = new URL(spec);
// HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(new Proxy(
// Proxy.Type.HTTP,new InetSocketAddress(proxyAddress,proxyPort)
// ));
SSLContext sc = SSLContext.getInstance("SSL");
TrustManager[] tmArr={new X509TrustManager(){
public void checkClientTrusted(X509Certificate[] paramArrayOfX509Certificate,String paramString) throws CertificateException{}
public void checkServerTrusted(X509Certificate[] paramArrayOfX509Certificate,String paramString) throws CertificateException {}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {return null;}
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] arg0, String arg1)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] arg0, String arg1)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
}
}};
sc.init(null, tmArr, new SecureRandom());
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.connect();
// try{
// BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
// String input;
// while ((input = br.readLine()) != null)
// System.out.println(input);
// } catch(Exception e){
//
// }
// }
package com.ticket;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
/**
* 实现用于主机名验证的基接口。
* 在握手期间,如果 URL 的主机名和服务器的标识主机名不匹配,则验证机制可以回调此接口的实现程序来确定是否应该允许此连接。
*/
public class MyHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname, SSLSession session) {
// if("localhost".equals(hostname)){
// return true;
// } else {
// return false;
// }
return true;
}
}