2013-05-13 48 views
1

我正在尝试使用适用于Android平台的SSL来保护基于TCP/IP的套接字连接。 这里是从我的代码片段一些:在Android中使用基于SSL的tcp/ip套接字

客户端:

SSLSocketFactory sslFact = null; 
    SSLContext ctx; 
    KeyStore ks; 

    char[] passphrase = "hosttest".toCharArray(); 

    ks = KeyStore.getInstance("BKS"); 
    ks.load(SSLActivity.mContext.getResources().openRawResource(R.raw.hosttestcert), passphrase); 

    TrustManagerFactory tmf =TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
    tmf.init(ks); 

    ctx = SSLContext.getInstance("TLS"); 
    ctx.init(null,tmf.getTrustManagers(), null); 
    sslFact = ctx.getSocketFactory(); 

    mySocket = (SSLSocket)sslFact.createSocket(); 
    mySocket.connect(new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 7891),1000); 

服务器端:

SSLServerSocketFactory sslSrvFact = null; 
SSLContext ctx; 
KeyManagerFactory kmf; 
KeyStore ks; 
// Load the self-signed server certificate 

char[] passphrase = "hosttest".toCharArray(); 

ks = KeyStore.getInstance("BKS"); 
ks.load(SSLActivity.mContext.getResources().openRawResource(R.raw.hosttestcert), passphrase); 
kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 

kmf.init(ks, passphrase); 

// Create a SSLContext with the certificate 

ctx = SSLContext.getInstance("TLS"); 
ctx.init(kmf.getKeyManagers(),null, null); 

sslSrvFact = ctx.getServerSocketFactory(); 
myServerSocket =(SSLServerSocket)sslSrvFact.createServerSocket(port); 

当我打电话从服务器接受()套接字调用,我发现了以下例外:

javax.net.ssl.SSLException: Could not find any key store entries to support the enabled cipher suites. 
org.apache.harmony.xnet.provider.jsse.OpenSSLServerSocketImpl.checkEnabledCipherSuites(OpenSSLServerSocketImpl.java:241) 
org.apache.harmony.xnet.provider.jsse.OpenSSLServerSocketImpl.accept(OpenSSLServerSocketImpl.java:186) 
at com.aricent.ssltesst.ApplinkTCPServer$1.run(ApplinkTCPServer.java:189) 
at java.lang.Thread.run(Thread.java:856) 

我正在关注这篇文章以生成我的证书和keystor e: http://randomizedsort.blogspot.in/2010/09/step-to-step-guide-to-programming.html 如果我在Android平台上丢失了某些东西或其他需要完成的密钥库,请提出建议。

回答

1

不知道你是否与我所做的一样,在我的应用程序中,我有1个JKS密钥库生成,然后我使用转换器复制Android的BKS密钥库副本。如果这是你在做什么,这是我的服务器端代码:

String keyStorePath = "absolute path to your JKS keystore file"; 
String keyStorePass = "keystore password"; 

System.setProperty("javax.net.ssl.keyStore", keyStorePath); 
System.setProperty("javax.net.ssl.keyStorePassword", keyStorePass); 

SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); 
SSLServerSocket serverSocket = (SSLServerSocket) sslserversocketfactory.createServerSocket(port_number); 

while (true) { 
    new ClientThread((SSLSocket) serverSocket.accept()).start(); 
}