2

嗨,我在尝试通过 SSL 卷曲我在本地创建的 REST Web 服务时非常头疼。我不断收到消息“卷曲:(60)SSL证书问题:自签名证书 更多详细信息:http: //curl.haxx.se/docs/sslcerts.html curl 默认使用证书颁发机构 (CA) 公钥(CA 证书)的“捆绑”执行 SSL 证书验证。如果默认捆绑文件不够用,您可以使用 --cacert 选项指定备用文件。如果此 HTTPS 服务器使用捆绑包中表示的 CA 签名的证书,则证书验证可能由于证书问题而失败(证书可能已过期,或者名称可能与 URL 中的域名不匹配)。如果您想关闭 curl 对证书的验证,请使用 -k(或 --insecure)选项。”

这是我遵循的步骤

  1. 使用 OpenSSL 私有证书和密钥对创建了我自己的 CA 证书 OpenSSL req -x509 -new -config c:\X509CA\openssl.cfg -days 365 -out c:\X509CA\ca\private_ca.pem -keyout c:\X509CA\ ca\private_ca_pk.pem 我的 CN:RESTfulCustomer
  2. 创建了密钥库和 mycert.pem keytool -genkey -validity 365 -alias myalias -keypass password -keystore myKeyStore.jks -storepass 密码使用与上面相同的 CN

  3. 创建了证书签名请求 keytool -certreq -alias myalias -file myCert_csr.pem -keypass password -keystore myKeyStore.jks -storepass password

  4. 使用 openssl ca -config c:\X509CA\openssl.cfg -days 365 -in c:\path\to\key_store\myCert_csr.pem -out c:\path\to\key_store\myCert.pem 签署了 CSR

  5. 转换为 PEM 格式 - 将签名证书 CertName.pem 转换为仅 PEM 格式,如下所示: Openssl x509 -in c:\path\to\key_store\myCert.pem -out c:\path\to\key_store\myCert .pem - 优于 PEM

  6. 连接 CA 证书文件和 certName.pem 副本 myCert.pem + c:\X509CA\ca\new_ca.pem myCert.chain
  7. 使用完整证书链更新密钥库 - 通过导入证书的完整证书链来更新密钥库 CertName.jks,如下所示: keytool -import -file myCert.chain -keypass password -keystore myKeyStore.jks -storepass password 最后导入它进入 Firefox,更新了我的 server.xml apache tomacat 7 启动正常,我可以毫无问题地导航到我的 ssl 网页。如果不使用 --insecure,Curl 将无法工作。我的 Curl 命令 curl -v --cacert ca.pem https:// localhost:8443/RESTfulCustomer/customers.json

上面的 curl 命令给了我消息“curl:(60)SSL证书问题:自签名证书”

在禁用 ssl 的情况下运行 http// localhost:8080/RESTfuCustomer.customers.json 的 Curl 命令可以正常工作。

我将 ca.pem 导入 myKeyStore.jks 并重新启动 Apache。环境 windows 7、apache tomcat 7、spring security 3.1、curl 7.30.0 (i386-pc-win32) libcurl/7.30.0 OpenSSL/1.0.1c zlib/1.2.7

任何帮助将不胜感激谢谢

4

2 回答 2

0

万一将来有人遇到这种情况,我必须为它创建证书localhost.com并将其添加到我的/etc/hosts文件末尾,就像这样,然后curl --cacert cert.crt https://localhost.com.

127.0.0.1   localhost
127.0.0.1   localhost.com

如果您不在 linux 或 mac 上,您可以在 docker 容器中尝试此操作,该容器将具有/etc/hosts.

我不知道为什么它不能localhost用作域名,但 curl 会一直抱怨自签名证书。可能与 docker 网络有关,也可能与 localhost 关键字有关。

于 2019-09-22T17:27:11.410 回答
-1

请参考以下答案:

总结一下:

% openssl s_client -showcerts -connect example.com:443 </dev/null 2>/dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' | grep -m1 -B-1 -- '-----END CERTIFICATE-----'  > cert.pem
% curl --cacert cert.pem https://example.com

和 tada,您可以安全地连接到自签名网站。

于 2015-03-08T15:04:15.307 回答