使用 cURL 的 HTTP GET 给出 SSL 错误

HTTP GET using cURL is giving SSL error

我已经编写了一个侦听端口 8000 的 REST 服务器。我正在尝试使用 cURL 命令从同一台机器调用 api -

curl -H "accept: application/json" https://localhost:8000/status -v

我收到以下错误

* About to connect() to localhost port 8000 (#0)
*   Trying ::1...
* Connected to localhost (::1) port 8000 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -12263 (SSL_ERROR_RX_RECORD_TOO_LONG)
* SSL received a record that exceeded the maximum permissible length.
* Closing connection 0
curl: (35) SSL received a record that exceeded the maximum permissible length.

我试过使用-k 选项绕过证书验证但没有成功。我在这里错过了什么?如果需要更多信息,请发表评论。

编辑: 我的朋友建议尝试在 cURL 命令中只使用 http。然后它绕过了 SSL 检查并且成功了。但是 https 出了什么问题?我还需要为本地主机安装证书吗?另外,为什么 -k 选项不起作用?

My friend suggested to try with only http in the cURL command. Then it bypassed SSL check and it worked.

看起来您的服务器根本没有启用 SSL。这就是 HTTP 有效而 HTTPS 无效的原因。使用 HTTP 不会绕过任何 SSL 检查,因为 HTTP 没有 SSL,因此没有要绕过的 SSL 检查。

Also, why didn't -k option work?

-k 选项用于跳过 SSL (HTTPS) 连接上的证书验证。但它只有在首先存在 SSL 连接的情况下才能工作。由于您的服务器根本不支持 SSL -k 将无济于事。

Do I need to install certificate for localhost also?

您需要先在您的(未知)服务器上启用 SSL。如果您对自己的服务器进行编码,则这意味着需要额外编码。而且,一旦服务器完全可以执行 SSL,您还需要设置服务器可以提供给客户端的证书。

就我而言,我必须检查我的虚拟主机配置。 我必须做的事情是为域定义一个特定的基于名称的虚拟主机。

也许有人只是想先快速测试一下,不想配置虚拟主机,然后他们就会遇到这个错误信息。