解決方案引起的就在這裏,能夠去除版本prolem
創建BKS文件爲Android客戶端所需
軟件安裝細節打造BKS文件:
下載鏈接,從密鑰存儲Explorer軟件http://keystore-explorer.sourceforge.net/
從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 i.e.PKCS文件(如果可用)
1)使用密鑰庫使用CA軟件.crt文件創建信任文件。
步驟:
開放式軟件
轉到文件 - >新建 - >從嚮導 選擇.BKS導入CA證書文件轉到工具 - >導入受信任的證書 - >選擇CA .crt文件 - > entert密碼 - >(如果證書是自簽名,它會拋出一個異常)強制導入文件。
4.保存擴展名爲.bks的文件。
2)創建密鑰庫使用軟件中使用.P12文件密鑰文件
步驟
開放式軟件 轉到文件 - >新建 - >從嚮導中選擇.BKS
導入> P12文件轉到工具 - >導入密鑰對 - >從嚮導中選擇PKCS#12 - >輸入文件和眉毛文件的描述密碼 - >輸入alise名稱(如果想更改其他可以保持原樣) - >輸入新密碼
用.bks擴展名保存文件nsion。
3)使用,如果.P12是使用密鑰存儲軟件
步驟
開放式軟件
轉到文件 - >新建 - >選擇.BKS從嚮導 導入不可用文件創建密鑰文件> p12文件轉到工具 - >導入密鑰對 - >從嚮導選擇OpenSSL - >未選中的文件密碼,眉毛.key和.crt(證書文件不是CA)文件 - >輸入alise名稱(如果想更改其他可以保留照原樣) - >輸入新密碼
用.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();
}
}
}
不要忘記使用SHA-256,SHA引起-1沒有與Android 23+更多的使用,並且是默認...... – Cukic0d