【发布时间】: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