如何在Java中正确使用SSL?

如何在Java中正确使用SSL?,java,ssl,Java,Ssl,不幸的是,我对SSL一无所知。目前我正试图用Java在客户端和服务器应用程序之间建立一个安全连接,下面的代码对我有效(传输的数据是加密的),但我不知道这是否是一个正确和安全的解决方案 客户端: socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port); socket.setUseClientMode(true); socket.setEnabledCipherSuites(socket.getSupp

不幸的是,我对SSL一无所知。目前我正试图用Java在客户端和服务器应用程序之间建立一个安全连接,下面的代码对我有效(传输的数据是加密的),但我不知道这是否是一个正确和安全的解决方案

客户端:

socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port);

socket.setUseClientMode(true);
socket.setEnabledCipherSuites(socket.getSupportedCipherSuites());
socket.startHandshake();
服务器端:

sslServerSocket = (SSLServerSocket) serverSocketFactory.createServerSocket(requestPort());

sslServerSocket.setUseClientMode(false);
sslServerSocket.setEnabledCipherSuites(sslServerSocket.getSupportedCipherSuites());

不建议启用所有密码/协议。最好只启用所需的密码和协议。如果服务器和服务器都是由您编写的,请选择所需内容并仅配置该内容

socket.setEnabledCipherSuites(...);
socket.setEnabledProtocols(...);
在中可以看到支持的密码和协议


或者您可以使用“jdk.tls.disabledAlgorithm”来控制要使用的ALG。

socket.setUseClientMode(true)是多余的,因为您已经是客户<代码>sslServerSocket.setUseClientMode(false)是冗余的,因为您已经是服务器;socket.setEnabledCipherSuite(socket.getSupportedCipherSuite());`没有安全感;和
socket.startHandshake()是不必要的。好的,你能告诉我怎么做吗?为什么这是不安全的?正如我所说的,我是SSL新手,所以我希望能有一点解释。正确的做法是删除我提到的所有代码。“受支持的”密码套件“包括那些不安全的套件:太宽,此处无法涵盖。您的代码应该在不使用密码的情况下工作,否则您可能会在某个地方遇到证书问题。在大多数情况下,最好不要随意使用已启用的密码套件,至少在客户端代码中是这样。