在wget中使用客户端证书


8

我无法使用wget使用客户端证书。该文档谈到了使用--certificate标志。

证书标志的用法很明确,我将其设置为使用客户端证书的PEM版本。

但是当我连接时,出现以下错误:

HTTP request sent, awaiting response... Read error (error:14094410:SSL routines:
SSL3_READ_BYTES:sslv3 alert handshake failure; error:140940E5:SSL routines:SSL3_
READ_BYTES:ssl handshake failure) in headers.
Giving up.

ssl握手失败表示客户端未提供正确的客户端证书。我使用的客户端证书仍然可以在浏览器中使用。

注意:当我在服务器上禁用客户端身份验证时,wget可以连接。注意:建议使用curl,但我想避免切换。


我做了一个变通方法:在没有客户端证书身份验证的Apache中定义VirtualHost,将DocRoot设置为相同的目录,并将Allow from设置为本地主机地址。

Answers:


7

我为此花了一个星期的时间,最后在此页面上得到的帮助。

我用来连接的命令是:

wget --ca-cert=/etc/ssl/certs/winhostname.pem --certificate=/etc/ssl/private/linuxhost.pem \
     --private-key=/etc/ssl/private/linuxhost.key https://winhostname.home.net:8443/winhosturl.asmx

你让我今天一整天都感觉很好!
Peter Butkovic

4

您确定SSL客户端证书身份验证对您的服务器有效吗?

我刚刚测试过,可以拿到我的证书(PKCS12格式),将其转换为PEM格式的证书和密钥文件,并与wget一起使用就可以了。

我可以引发三个错误情况,没有一个与您报告的情况相符:

  1. 无法提供我的密钥文件:400错误的请求
  2. 提供错误的密钥:EVP_DecryptFinal_ex:从OpenSSL进行错误的解密
  3. 提供服务器不喜欢的有效证书:403禁止

我正在使用nginx;您没有提及您使用的是什么,所以我不确定Apache是​​否会返回相同的响应。

我建议您获取证书和密钥,将其组合到PKCS12中(或者,如果您的浏览器支持该格式,则将其导入为PEM),并确保所有内容都首先在该方面起作用。

如果您已经这样做了,也许可以从另一台机器上尝试一下,以确保它与所使用的OpenSSL版本没有什么不同。

最后,尝试在s_client模式下使用OpenSSL:

openssl s_client -cert cert.pem -key req.pem -connect host:port -debug

并查看事情是否在该级别上起作用。如果是这样,则wget有点问题,您可能需要重新构建或重新安装它。如果没有,调试输出级别可能比wget的调试输出更能帮助您查明问题。


我尝试了所有建议:1.证书在FF 3.5中工作正常2.服务器:Apache 2.2.11,Openssl 0.9.8i,Windows Server 2003客户端:WGET 1.11.4,OpenSSL 0.9.8k(二进制),Win XP SP3 3从另一台计算机:结果相同4.我收到了Comodo的证书。证书和密钥合而为一。我尝试了以下操作:openssl s_client -cert cert.pem openssl s_client -cert cert.pem -key key.key(从cert提取)openssl s_client -cert cert.pem -key copyofcert.pem(续下一条评论)

所有人都给出了相同的错误:<br>错误设置私钥<br> 8584:error:0B080074:x509证书<br>例程:X509_check_private_key:key值<br>请注意,这是一个与上面的不匹配项不同的错误:。\ crypto \ x509 \ x509_cmp.c:399:

您会混淆证书和密钥。在使其与openssl s_client一起使用之前,可以确保将错误的文件(内容)传递给wget。查看文件内部,查看它们是否被标记(通常带有--- BEGIN PRIVATE KEY ---或--- BEGIN RSA KEY--或--- BEGIN CERTIFICATE -...等。 .that会告诉您文件中的内容)
Ram 2012年

2

我已经成功使用了wget这样的:

"C:\program files\GnuWin32\bin\wget" --no-check-certificate --certificate=C:\Users\Alex\xxx.pem --private-key=C:\Users\Alex\xxx.pem --input-file=retain.url --output-document=retain.xml

注意--private-key option。keep.url有https://bla.bla.bla

但是,它现在提示我“输入PEM密码:”。

如果我输入密码可以正常工作,但是有人知道该提示的方法吗?


4
创建没有任何口令的密钥副本:openssl rsa -in key.pem -out keyout.pem
pehrs 2010年

0

wget是否可以连接到端口80?该错误与我意外地让HTTP监听80和443-wget尝试使用SSL并没有获得所需响应的测试错误有关。


不。该URL在脚本中,因此始终相同。当我关闭客户端身份验证但https打开时,它可以工作。

0

获取网络捕获并将其加载到Wireshark中。这应该使您更清楚地了解SSL / TLS级别的故障。


0

SSLv3在0.9.8之类的版本中存在问题。

尝试将-no_ticket传递给openssl s_client或-ssl2工作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.