gpt4 book ai didi

java - 如何使用自签名证书从 Javascript 连接到 SSL 服务器?

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:15 26 4
gpt4 key购买 nike

我创建了一个我正在尝试做的简单示例。

我有这样的服务器代码:

package com.company;

import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class EchoServer {
public
static
void
main(String[] arstring) {
try {

SSLServerSocketFactory sslserversocketfactory =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket =
(SSLServerSocket) sslserversocketfactory.createServerSocket(9999);
SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();

InputStream inputstream = sslsocket.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

String string = null;
while ((string = bufferedreader.readLine()) != null) {
System.out.println(string);
System.out.flush();
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
}

客户端代码如下:

<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta charset="utf-8">

<script type="text/javascript">
function onClick(){
var wrc_socket = new WebSocket('wss://localhost:9999');
wrc_socket.onmessage = function(event) {
alert('message = '+event.data);
};
wrc_socket.onclose = function(event) {
alert('Socket is close!');
};
wrc_socket.onopen = function(event) {
alert('Socket is open!');
};
wrc_socket.send('Hi there!');
alert('Done!');
}
</script>
</head>

<body>
<a href="#" onclick="onClick()">Test!</a>
</body>
</html>

我已经创建了私钥和公钥对,并将其导入到 keystore 文件中,如 here 所述。

我使用以下参数运行服务器应用程序:

-Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456 -Djavax.net.debug=all

当我点击“测试”按钮时,我在 ssl 调试中遇到了这个错误:

main, WRITE: TLSv1.2 Change Cipher Spec, length = 1
[Raw write]: length = 6
0000: 14 03 03 00 01 01 ......
Disconnected from the target VM, address: '127.0.0.1:64118', transport: 'socket'

由于某种原因,连接在握手期间关闭。我无法弄清楚原因,请提出解决方案或一些想法进行检查。

最佳答案

终于明白是什么原因了。在证书或 key 的生成过程中(无论什么......)我输入了假定的服务器名称,但在 wss 连接期间地址是 ip - 因此,不匹配并且握手失败。

结论:确保你的wss使用的url和带ssl的名字一样。

关于java - 如何使用自签名证书从 Javascript 连接到 SSL 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35023083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com