Grizzly Server中止了SSL握手

时间:2014-08-07 16:21:29

标签: maven curl ssl safari grizzly

我对使用自签名证书的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

还有其他人遇到过同样的问题吗?

ADD:

对于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开心?

1 个答案:

答案 0 :(得分:1)

  

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

cURL不使用操作系统的钥匙串。该规则的例外是如果 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 Projects' Root Certificate Policy

要解决此问题,您可能需要查看Getting Chrome to accept self-signed localhost certificate

根据您的问题发布证书可能是个好主意。使用以下命令生成它(假设其PEM编码):

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

  

还有其他人遇到过同样的问题吗?

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