解决方案在这里,能够删除版本问题
为android客户端创建BKS文件
创建 BKS 文件所需的软件安装详细信息:
从链接http://keystore-explorer.sourceforge.net/下载 Keystore Explorer 软件
从http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html下载 UnlimitedJCEPolicyJDK7
解压缩 zip 并将 US_export_policy 和 local_policy 复制到您的 C:/programes 文件/java/jre7/lib/security 文件夹。
安装 Keystore Explorer 软件。
生成 BKS 文件的步骤:(需要 CA 文件、证书文件、密钥文件和 .P12 iePKCS 文件(如果有)。
1) 使用密钥库软件使用 CA .crt 文件创建信任文件。
脚步:
打开软件
Go File->New->从向导中选择.BKS 导入CA证书文件Go Tool->Import trust certificate->选择CA .crt文件->输入密码->(如果证书是self会抛出异常签名)强制导入文件。
4.以.bks 扩展名保存文件。
2) 使用密钥库软件使用 .P12 文件创建密钥文件
脚步
打开软件Go File->New->从向导中选择.BKS
导入 >p12 文件 Go Tool -> 导入密钥对 -> 从向导中选择 PKCS #12 -> 输入文件的解密密码并浏览文件 -> 输入别名(如果要更改,可以保持原样)-> 输入新的密码
以 .bks 扩展名保存文件。
3) 如果 .P12 不可用,则使用密钥库软件创建密钥文件
脚步
打开软件
转到文件->新建->从向导中选择 .BKS 导入 >p12 文件转到工具 -> 导入密钥对 -> 从向导中选择 OpenSSL ->未选中文件的解密密码,浏览 .key 和 .crt(证书文件不是 CA)文件 -> 输入别名(如果要更改,可以保持原样) -> 输入新密码
以 .bks 扩展名保存文件。
将两个文件复制到 res/raw 文件夹中(两个 BKS 文件都是强制性的)。
代码:
static final String ENABLED_CIPHERS[] = {
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
"TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
"TLS_ECDHE_RSA_WITH_RC4_128_SHA",
"TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
"TLS_RSA_WITH_AES_256_CBC_SHA",
"TLS_RSA_WITH_AES_128_CBC_SHA",
"SSL_RSA_WITH_3DES_EDE_CBC_SHA",
"SSL_RSA_WITH_RC4_128_SHA",
"SSL_RSA_WITH_RC4_128_MD5",
};
// put this in a place where it can be reused
static final String ENABLED_PROTOCOLS[] = {
"TLSv1.2", "TLSv1.1", "TLSv1"
};
private void sslCon()
{
try {
// setup truststore to provide trust for the server certificate
// load truststore certificate
InputStream trustStoresIs = getResources().openRawResource(R.raw.client_ca);
String trustStoreType = KeyStore.getDefaultType();
KeyStore trustStore = KeyStore.getInstance(trustStoreType);
trustStore.load(trustStoresIs, "spsoft_123".toCharArray());
//keyStore.setCertificateEntry("ca", ca);
// initialize trust manager factory with the read truststore
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(trustStore);
// setup client certificate
// load client certificate
InputStream keyStoreStream = getResources().openRawResource(R.raw.client_cert_key);
KeyStore keyStore = null;
keyStore = KeyStore.getInstance("BKS");
keyStore.load(keyStoreStream, "your password".toCharArray());
KeyManagerFactory keyManagerFactory = null;
keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, "your password".toCharArray());
// Create an SSLContext that uses our TrustManager
SSLContext context = SSLContext.getInstance("SSL");
context.init(keyManagerFactory.getKeyManagers(), tmf.getTrustManagers(), null);
SSLSocketFactory sslsocketfactory = (SSLSocketFactory)context.getSocketFactory();
InetAddress serverAddr = InetAddress.getByName("192.168.11.104");
sslSocket = (SSLSocket) sslsocketfactory.createSocket(serverAddr, 5212);
//String[] ciphers = sslSocket.getEnabledCipherSuites();
sslSocket.setEnabledCipherSuites(ENABLED_CIPHERS);
// put this right before setEnabledCipherSuites()!
//sslSocket.setEnabledProtocols(ENABLED_PROTOCOLS);
//InputStream inputStream = sslSocket.getInputStream();
OutputStream out = sslSocket.getOutputStream();
Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_SHORT).show();
sslSocket.close();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}