通过SSL卷曲自签名证书Web服务

时间:2013-07-19 14:36:17

标签: rest curl self-signed

您好我正在努力卷曲我通过SSL在本地创建的REST Web服务。 我不断收到消息“curl:(60)SSL证书问题:自签名证书 更多详情:http://curl.haxx.se/docs/sslcerts.html curl默认使用“捆绑”执行SSL证书验证  证书颁发机构(CA)公钥(CA证书)。如果是默认值  捆绑文件不够用,您可以指定备用文件  使用--cacert选项。 如果此HTTPS服务器使用由CA表示的CA签名的证书  捆绑,证书验证可能由于a而失败  证书问题(可能已过期,或名称可能已过期)  与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. 与CSR签约 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 password -keystore myKeyStore.jks -storepass密码 最后将它导入firefox,更新了我的server.xml apache tomacat 7启动正常,我可以导航到我的ssl网页,没有任何问题。如果不使用--insecure,卷曲不起作用。我的卷曲命令 curl -v --cacert ca.pem https:// localhost:8443 / RESTfulCustomer / customers.json
  8. 上面的curl命令给我留言“curl:(60)SSL证书问题:自签名证书”

    运行http // localhost的Curl命令:8080 / RESTfuCustomer.customers.json并禁用ssl工作正常。

    我将ca.pem导入myKeyStore.jks并重新启动Apache。 Environemnt 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

    任何帮助都会非常感激 感谢

2 个答案:

答案 0 :(得分:0)

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

127.0.0.1   localhost
127.0.0.1   localhost.com

如果您不在Linux或Mac上,则可以在具有/etc/hosts的Docker容器中尝试使用。

我不知道为什么不能将localhost作为域名使用,但是curl会不断抱怨自签名证书。可能与docker联网或localhost关键字有关。

答案 1 :(得分:-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,您可以安全地连接到自签名网站。