我最近一直在将SSL套接字用于消息传递系统。
我终于开始使用CA颁发的证书。我将其导入到密钥库中,设置了密钥库属性,并启动了客户端,但是当我尝试发送数据时,我一直收到握手异常。
我启用了调试模式,发现这是由于造成的no cipher suites supported
。有什么想法吗?
如果有帮助,它还说它忽略了TLSV1和TLSV1.1中的大约10个密码套件。
我还安装了无限强度加密策略。
客户代码
public static void Message(String args){
System.setProperty("https.protocols", "TLSv1");
System.setProperty("javax.net.debug", "all");
try
{
String host = "localhost";
int port = 3498;
InetAddress address = InetAddress.getByName(host);
socket = (SSLSocket)SSLSocketFactory.getDefault().createSocket(address, port);
//Send the message to the server
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
String number = "Hello from the other side!";
String sendMessage = number + "\n";
bw.write(args);
bw.flush();
System.out.println("Message sent to the server : "+sendMessage);
//Get the return message from the server
}
catch (Exception exception)
{
exception.printStackTrace();
}
finally
{
//Closing the socket
try
{
socket.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
服务器代码
private void initListen() {
System.setProperty("javax.net.ssl.keyStore", "/Users/181095/server.jks");
try {
SSLServerSocketFactory sf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
SSLServerSocket serverSocket = (SSLServerSocket)sf.createServerSocket(Ting.port);
System.out.println("Server Started and listening to the port "
+ Ting.port);
// Server is running always. This is done using this while(true)
// loop
while (true) {
// Reading the message from the client
socket = (SSLSocket)serverSocket.accept();
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String input = br.readLine();
System.out.println("Message received from client is " + input);
/*if(PacketReader.isPacket(input)){
if(PacketReader.shouldSendDataBack(input)){
}
}*/
/*
*
* if client has data waiting or client has new data
* request new data.
* else, wait 5 seconds and repeat
*
*
*/
// Sending the response back to the client.
/*OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write("");*/
//TODO Implement method to send this data to client storage data.
//bw.flush();
}
//Check for exceptions and try to close the socket.
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (Exception e) {
}
}
}
编辑: 我刚刚添加了密码,但是我的输入/证书没有密钥,这是否可能导致错误?我该如何解决?
令人惊讶的是,这可能意味着服务器找不到私钥/证书对。在这种情况下,这是因为您尚未通过来指定密钥库密码javax.net.ssl.keyStorePassword
。
问题内容: 我正在尝试通过Java SSLSockets将安全性应用于简单的聊天应用程序。 我创建了一个自签名的CA,并用它签署了两个证书(全部使用了RSA密钥),一个证书用于服务器,一个证书用于客户端。之后,我将证书导入服务器的密钥库和客户端的密钥库。 我想使用特定的密码,但显然所有受支持的密码均无效。 我为客户提供的代码: 对于服务器: 对不起,如果我的英语有点生锈。 我的操作系统是OS X
问题内容: 按照此处的说明进行操作,并重新创建了我以前错误创建的证书。就像我现在在服务器和客户端上看到的一样,情况发生了变化。 服务器是ClassFileServer.java,相应的客户端是SSLSocketClientWithClientAuth.java 有关使两端都能正常播放的任何提示,请注意,我使用的是localhost,因此我假设密码功能相同。 更新: 这是我用于生成文件的步骤,我可能
问题内容: 我正在使用的保护客户端和服务器程序之间的通信。该服务器程序还提供来自Web浏览器的HTTPS请求。 据“ 开始加密与Java ”,371页,你应该总是叫,以确保密码套件最终被谈判是为您的目的足够强。 话虽这么说,对我的方法的调用产生了大约180个选项。这些选项的范围从(我认为是相当安全的)到(不确定MD5的当前状态是否安全)到(不确定要做什么)。 限制套接字使用的密码套件的明智列表是什
问题内容: 我正在尝试在两个Java项目之间建立安全连接,但是却遇到了SSLHandshakeException(没有通用密码套件)的问题。这是在两侧创建套接字的方法: 客户: 服务器: 我有一个用keytool生成的RSA密钥。此代码从磁盘加载它。 我做错了什么? 更新: 我在此数组的两侧添加了对setEnabledCipherSuites的调用: 我得到相同的结果。 问题答案: 在服务器端,你
问题内容: 我正在使用SSLServerSocket接受我的openSUSE服务器上的客户端连接,但是它们都无法连接。我总是得到SSLHandshakeException的说法。我已经激活了所有可能的套件,启用了多个协议,并尝试了最新的Oracle JRE和openjdk。另外,我还关注了论坛和相关内容上的其他几篇文章,并“解锁”了Oracle jre中的所有密码套件,并像这样更改了openjdk
我正在使用SSLServerSocket来接受我的openSUSE服务器上的客户端连接,但是它们都不能连接。我总是得到一个SSLHandshakeExc0019说。我已经激活了所有可能的套件,启用了多种协议,尝试了最新的oracle JRE和openjdk。我还关注了论坛上的其他几篇文章,并“解锁”了甲骨文jre中的所有密码套件,我像这样更改了openjdk jre的设置: 禁用:并启用: 以下是