【问题标题】:Grizzly Server aborted the SSL handshakeGrizzly 服务器中止 SSL 握手
【发布时间】:2014-08-07 16:21:28
【问题描述】:

我有一个关于将 SSL 与自签名证书一起使用的问题。 我在这里使用了这个例子http://people.apache.org/~gmazza/restexamples/https-clientserver-grizzly

单元测试完美运行。但是,如果我启动 grizzly 服务器,并尝试使用 curl 来获取资源,则会收到如下错误:

curl -v https://localhost:8443/api/v1/hello
* Adding handle: conn: 0x7ff69b004400
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7ff69b004400) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 8443 (#0)
*   Trying ::1...
*   Trying fe80::1...
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8443 (#0)
* Server aborted the SSL handshake
* Closing connection 0
curl: (35) Server aborted the SSL handshake

我已经将证书添加到系统密钥链中,并且始终信任所有类别。尽管如此,没有浏览器可以获取资源。这是我从 Chrome 收到的错误消息。

无法与服务器建立安全连接。这可能是服务器的问题,或者可能需要您没有的客户端身份验证证书。 错误代码:ERR_SSL_PROTOCOL_ERROR

有没有人遇到过同样的问题?

添加:

对于 curl,我使用密钥工具生成 java 密钥库和证书

keytool  -genkey -keystore ./keystore_server -alias serverKey -dname "CN=localhost, OU=Jersey, O=Sun Microsystem, L=Prague, ST=Czech Republic, C=CZ"  
keytool -export -alias serverKey -rfc -keystore ./keystore_server > ./server.cert
openssl x509 -in server.cert -inform PEM -text -out server.pem 

然后我跑了

curl -E server.pem -v https://localhost:8443/api/v1/hello -u "username:password"

但是,我遇到了和以前一样的错误。

对于浏览器,我现在可以在 Firefox 和 Chrome 上使用它。但是,我仍然无法使用 Safari。我收到错误消息说 Safari 无法打开页面,因为 safari 无法建立与服务器的安全连接。任何人都知道如何让 safari 快乐?

【问题讨论】:

  • 只是一个疯狂的猜测,可能是密钥/证书文件仅对单元测试可见,它们位于 test/resources 而不是 main/resources 中。如果不是这样 - 请。分享 maven 项目,以便我们仔细检查。
  • 文件其实和pom.xml在同一个目录下。与此处示例相同的结构:github.com/jersey/jersey/tree/master/examples/…

标签: maven curl ssl safari grizzly


【解决方案1】:

但是,如果我启动 grizzly 服务器,并尝试使用 curl 获取资源,我会收到类似...的错误。

cURL 不使用操作系统的钥匙串。规则的例外是 if cURL 是针对 iOS 或 OS X 的 SecureTransport 构建的。请参阅 curl.1 the man page-E--cert 选项。即使在这种情况下,它也不适用于受信任的锚。

如果您想使用特定的 CA 来验证服务器,那么您应该使用 --cacert 选项指定它。您还可以使用此选项指定 cacert.pem 捆绑包。见curl.1 the man page


Chrome ... 错误代码:ERR_SSL_PROTOCOL_ERROR

这是一个不同的问题。 Chrome 使用操作系统的密钥库。请参阅 Chromium 项目的Root Certificate Policy

要修复它,您可能需要查看Getting Chrome to accept self-signed localhost certificate

将证书与您的问题一起发布可能是个好主意。使用以下内容生成它(假设它的 PEM 编码):

openssl x509 -in <cert> -inform PEM -text -noout

有没有人遇到过同样的问题?

其他人可能也遇到过这个问题。

【讨论】:

  • 我现在已经让它适用于 Firefox 和 Chrome。但是,我仍然无法使用 Safari。我收到错误消息说 Safari 无法打开页面,因为 Safari 无法建立与服务器的安全连接。你知道我怎样才能让 safari 快乐吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 2016-03-02
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
相关资源
最近更新 更多