Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务器如何将数字证书传递给客户端/浏览器_Java_Ssl_Encryption - Fatal编程技术网

Java 服务器如何将数字证书传递给客户端/浏览器

Java 服务器如何将数字证书传递给客户端/浏览器,java,ssl,encryption,Java,Ssl,Encryption,我一直在使用Java编写一个服务器来接收客户端请求。它工作得很好,但我不知道如何为身份验证模块实现SSL/https 我已经研究过这些机制,但是当我尝试使用ajax请求在https协议下请求我的服务器时,请求头以及表单数据都是自动加密的。。。。我认为客户端(在本例中是浏览器)应该向服务器请求公钥进行加密。现在服务器只接收到加密字符块,不知道发生了什么 因此,我的问题是如何以正确的方式实现SSL身份验证,至少我的服务器如何将公钥传递给客户端进行加密 我认为客户端(在本例中是浏览器)应该向服务器请求

我一直在使用Java编写一个服务器来接收客户端请求。它工作得很好,但我不知道如何为身份验证模块实现SSL/https

我已经研究过这些机制,但是当我尝试使用ajax请求在https协议下请求我的服务器时,请求头以及表单数据都是自动加密的。。。。我认为客户端(在本例中是浏览器)应该向服务器请求公钥进行加密。现在服务器只接收到加密字符块,不知道发生了什么

因此,我的问题是如何以正确的方式实现SSL身份验证,至少我的服务器如何将公钥传递给客户端进行加密

我认为客户端(在本例中是浏览器)应该向服务器请求公钥进行加密

不。SSL不使用公钥加密

现在服务器只接收到加密字符块,不知道发生了什么

您正在接收TLS

我认为客户端(在本例中是浏览器)应该向服务器请求公钥进行加密

不,见上文

因此,我的问题是如何以正确的方式实现SSL身份验证,至少我的服务器如何将公钥传递给客户端进行加密


您的服务器不必将公钥传递给客户端进行加密,在任何情况下,加密和身份验证都是两码事。你是误会的受害者。只需设置您的密钥对和证书,并使用《JSSE参考指南》中描述的
javax.net.ssl.SSLSocket,

如果您想编写自己的身份验证模块,您必须从头开始实现TLS/ssl协议并遵循它。否则,当您收到“加密字符块”(您应该能够使用服务器sprivate密钥解密)时,这一部分已经发生了。您的服务器是如何实现的?您是在容器内运行(例如
Jetty
Tomcat
),还是直接使用
SSLSockets
进行通信?一旦设置正确,加密对双方都是透明的。好吧,我不使用任何现有的容器,只使用普通的SSLSockets和SSLServerSocket进行直接通信。我执行SSLSocket.startHandshake(),似乎没有错误,但ajax请求只是返回了“ERR\u unsecure\u RESPONSE”。再一次,浏览器没有对证书或对不安全网站的任何访问发出警告。。。所以我想我的实现中一定遗漏了什么。。。。有什么想法吗,伙计们?好的,现在我改为创建一个SSLSocketServer,并将收到的套接字改为SSLSocket。但是ajax请求返回一个状态“ERR_unsecure_RESPONSE”。而且浏览器也没有请求证书(如果继续访问不安全的网站,通常会显示屏幕/警告等)