【问题标题】:curl self-signed certificate web service over SSL通过 SSL 卷曲自签名证书 Web 服务
【发布时间】:2013-07-18 21:34:53
【问题描述】:

您好,我在尝试通过 SSL 卷曲我在本地创建的 REST Web 服务时非常头疼。 我不断收到消息“curl: (60) SSL 证书问题:自签名证书 更多详情:http://curl.haxx.se/docs/sslcerts.html curl 默认使用“捆绑包”执行 SSL 证书验证 证书颁发机构 (CA) 公钥(CA 证书)。如果默认 捆绑文件不够用,您可以指定一个备用文件 使用 --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 密码 -keystore myKeyStore.jks -storepass 密码 使用和上面一样的CN

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

  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

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

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

上面的 curl 命令给了我消息“curl: (60) SSL certificate problem: self signed certificate”

在禁用 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

任何帮助将不胜感激 谢谢

【问题讨论】:

  • 考虑编辑您的问题以提高可读性。随意使用粗体功能来突出重要细节或您的问题是什么。这将使您更快地得到答案。除此之外,欢迎来到 SO!

标签: rest curl self-signed


【解决方案1】:

万一以后有人遇到这种情况,我必须为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 关键字有关。

【讨论】:

    【解决方案2】:

    请参考以下答案:

    总结一下:

    % 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-10-21
      • 2012-04-23
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2012-11-01
      • 2010-11-13
      相关资源
      最近更新 更多