我有以下使用SSL的客户端和服务器:
客户端代码(桌面):
SSLSocket socket= (SSLSocket)sslsf.createSocket(ip,Constants.CHAT_SERVER_PORT);
final String[] enabledCipherSuites = socket.getSupportedCipherSuites();
socket.setEnabledCipherSuites(enabledCipherSuites);
服务器代码(Android):
SSLServerSocket ss=(SSLServerSocket)sslssf.createServerSocket(Constants.CHAT_SERVER_PORT);
final String[] enabledCipherSuites = ss.getSupportedCipherSuites();
ss.setEnabledCipherSuites(enabledCipherSuites);
while(true){
Socket s=ss.accept();
}
我在没有truststore和keystore的情况下使用它们。它们是强制性的吗?
答案 0 :(得分:0)
如果要求提供证书,您只需要一个密钥库,即如果您是服务器或服务器需要客户端身份验证。
Java附带了一个默认信任库。如果您没有指定另一个,则使用它。
请勿启用已禁用的密码套件。他们是不安全的。你只是避免了这个问题。解决它。
答案 1 :(得分:0)
最后,通过以下代码,我解决了Android服务器的密钥库问题: -
try{
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(Dummy.class.getResourceAsStream("IPMessengerServerKeystore"), "dhar9654".toCharArray());
String keyalg=KeyManagerFactory.getDefaultAlgorithm();
KeyManagerFactory kmf=KeyManagerFactory.getInstance(keyalg);
kmf.init(keyStore, "dhar9654".toCharArray());
SSLContext context = SSLContext.getInstance("TLS");
context.init(MainActivity.kmf.getKeyManagers(), null, null);
SSLServerSocket ss=(SSLServerSocket)context.getServerSocketFactory().createServerSocket(Constants.CHAT_SERVER_PORT);
}catch(Exception e){
e.printStackTrace();
}