【问题标题】:how a server could pass the digital certifcate to the client / browser服务器如何将数字证书传递给客户端/浏览器
【发布时间】:2014-10-24 08:34:48
【问题描述】:

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

我研究过机制,但是当我尝试使用 ajax 请求在 https 协议下请求我的服务器时,请求标头以及表单数据都是 自动加密 ....我认为客户端(在这种情况下是浏览器)应该向服务器询问用于加密的公钥。现在服务器刚刚收到大块的加密字符,不知道发生了什么。

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

【问题讨论】:

  • 如果您想编写自己的身份验证模块,您必须从头开始实现 TLS/SSL 协议并遵循它。否则,当您收到“加密字符块”(您应该能够使用您的服务器私钥解密)时,这部分已经发生
  • 你的服务器是如何实现的?你是在容器内运行(如JettyTomcat),还是直接使用SSLSockets进行通信?正确设置后,加密对双方都是透明的。
  • 好吧,我没有使用任何现有的容器,只是使用普通的 SSLSockets 和 SSLServerSocket 进行直接通信。我执行了 SSLSocket.startHandshake(),似乎没有错误,但是 ajax 请求只是返回了“ERR_INSECURE_RESPONSE”。同样,浏览器没有警告证书或对不安全网站的任何访问......所以我认为我的实现中一定遗漏了一些东西......有什么想法,伙计们?

标签: java ssl encryption


【解决方案1】:

我认为客户端(在这种情况下是浏览器)应该向服务器请求公钥以进行加密。

没有。 SSL 不使用公钥加密。

现在服务器刚刚收到大块的加密字符,不知道发生了什么。

您正在接收 TLS。

我认为客户端(在这种情况下是浏览器)应该向服务器请求公钥以进行加密。

没有。见上文。

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

您的服务器不必将公钥传递给客户端进行加密,无论如何加密和身份验证是两件不同的事情。你是误会的受害者。只需按照 JSSE 参考指南中的说明设置您的密钥对和证书并使用 javax.net.ssl.SSLSocket,

【讨论】:

  • 好的,所以现在我改创建一个SSLSocketServer,并将接收到的socket改成SSLSocket。但是 ajax 请求返回了一个状态“ERR_INSECURE_RESPONSE”。并且浏览器也没有请求证书(通常应该询问屏幕/警告是否继续不安全的网站等)
猜你喜欢
  • 1970-01-01
  • 2016-08-24
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2015-11-30
  • 1970-01-01
相关资源
最近更新 更多