【问题标题】:How to use a .cer client certificate in order to perform a cURL request like this?如何使用 .cer 客户端证书来执行这样的 cURL 请求?
【发布时间】:2021-10-05 20:48:41
【问题描述】:

我不太喜欢 SSL 证书,我在与客户端合作时遇到以下情况。

他们要求我生成服务器根 CA,我通过以下命令使用 openSSL 生成它:

#Generate Server RootCA
openssl req -newkey rsa:2048 -keyform PEM -keyout rootca.key -x509 -days 3650 -outform PEM -out rootca.cer

所以基本上这个命令生成了 rootca.cer 证书和 rootca.key 文件。我只向他们提供了他们安装在系统上(在平衡器\防火墙上)的 rootca.cer 证书。

在这个系统上部署了一些 REST API。我必须开发一个调用这些 API 的客户端。所以现在我想尝试从 shell 执行 cURL 调用。据我所知,我必须使用以前的根 CA 来生成我将用于执行调用的客户端证书。对吗?

所以我使用这个命令创建了这个客户端证书:

#Generate Client Certiicate
openssl genrsa -out client.key 2048

#Generate signing request
openssl req -new -key client.key -out client.req -sha256

#Generate Client  certificate
openssl x509 -req -in client.req -CA rootca.cer -CAkey rootca.key -set_serial 101 -extensions server -days 3650 -outform PEM -out client.cer -sha256

现在我有了这个应该是客户端证书的 client.cer 文件。

所以基本上他们给了我一个这样的 cURL 示例:

curl --location --request GET "https://apiName.companyName.it/ws-
application/service/distretti/_/_/_"

但我收到以下错误:

curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to annuariows.notariato.it:443 

我认为这是因为我必须让 cURL 使用以前的客户端证书来执行我的请求。

那么我要如何使用这个 client.cer 才能正确执行我的 API 调用?

【问题讨论】:

    标签: ssl curl openssl certificate ssl-certificate


    【解决方案1】:

    您可以使用参数--cert 和--key 来指定证书。

    我以前曾在与您类似的环境中使用过此语句:

    $ curl -v -i "https://host.tld" --cert "certificate_pem_format.crt" --key "keyfile.key"
    

    -v 选项用于获取详细输出,以便在必要时进行进一步调试。 -i 选项是显示响应头,也有利于调试。另请查找:List of CURL options。

    我怀疑您指定的这个错误是否是由证书引起的。如果您想调试证书问题,请尝试使用 OpenSSL:

    $ openssl s_client -connect host.tld:443
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-08
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多