Using curl -with --cert



我使用cUrl使用他们发给我的.cer证书从公司网站请求数据。这是命令:

cUrl --header "Content-Type: text/xml;charset=UTF-8" 
     --data @bustaRequestISEE2015ConsultazioneAttestazione.xml 
     -o bustaResponseISEE2015ConsultazioneAttestazione.xml 
     --cert ./caaffabisrl.cer 
     https://istitutonazionaleprevidenzasociale.spcoop.gov.it/PD

当我运行它时,我会收到以下错误消息:

curl:(58)无法加载PEM客户端证书,OpenSSL错误错误:0906D06C:PEM例程:PEM_read_bio:没有开始行,(找不到密钥,错误的短语或wrong文件格式?)

有人能帮我吗?

天啊,克里斯蒂亚诺。

仅使用客户端证书而不使用客户端私钥是不可能连接到带有curl的TLS服务器的。要么他们忘记向你发送私钥文件,要么他们向你发送的不是客户端证书,而是用于验证的服务器证书。

我要尝试的第一件事是使用--cacert而不是--cert。也就是说,告诉curl这是服务器的证书,curl可以使用该证书来验证服务器是否是您认为的服务器

您也可以尝试删除--cert而不使用--cacert,您可能会收到服务器不受信任的错误。然后添加--insecure参数,看看这是否有效。我不会保留这个论点,因为那样你就没有证据证明你在和谁说话

我的猜测是,它是服务器证书,使用--cacert而不是--cert将解决问题。

我的猜测是,您的证书文件是DER编码的二进制证书,而不是base-64编码的证书。要将从二进制转换为base-64,可以使用OpenSSL。

openssl x509 -inform der -in certificate.cer -out certificate.pem

我总是忘记所有的争论,并将以下网站作为书签,因为它提供了如何转换几乎任何证书格式的示例。https://www.sslshopper.com/ssl-converter.html

首先,您需要指定是要执行双向TLS/SSL还是MTLS(双向TLS)。这通常是发送证书的原因。如果他们发送了服务器证书,但您可以使用浏览器连接到服务器,则可以下载证书。如果他们的服务器被配置为发送服务器证书和CA链,那么你可以使用";openssl s_client-connect[主机名:端口]-showcerts"。将控制台中的证书保存到一个文件中,将证书blob复制到各个证书文件(cert1.crt、cert2.crt)中。但是,如果他们期望MTLS并试图向您发送客户端证书,则可能您已经生成了私钥和CSR(证书签名请求),并向他们发送CSR。然后,他们将使用CSR用CA证书签署证书。然后,他们返回的证书需要与用于生成CSR的私钥配对。他们不应该生成公钥/私钥对并通过邮件发送。私钥应该安全地存储在用于建立连接的一个系统上。如果它是单向的(仅限服务器ssl),那么您的客户端系统(假设它不是浏览器)需要一个信任存储文件,其中安装了CA证书链并设置为可信。如果平台是Java,请阅读Java的keytool文档。请注意,密钥库用于您的系统公共/私有密钥对。信任库用于您信任的CA证书,以签署您的系统应该信任为可信的公共证书。您需要阅读DigiCert、SSLLABS、Sectigo等的PKI x509概述。

最新更新