我无法使用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握手失败意味着客户端没有提供正确的客户端证书。 仍然是我使用的客户端证书,在浏览器中工作。
注意:当我禁用服务器上的客户端身份validation时,wget可以连接。 注意:build议使用curl,但我想避免切换。
您确定SSL客户端证书身份validation对您的服务器有效吗?
我只是testing了一下,我可以拿我的证书(PKCS12格式),将其转换为PEM格式的证书和密钥文件,并使用wget就可以了。
我可以挑起三个错误条件,这些条件都不符合你所报告的内容:
我正在使用nginx; 你没有提到你使用的是什么,所以我不确定Apache是否会返回相同的响应。
我build议把你的证书和密钥,结合到PKCS12(或只是如果你的浏览器支持格式导入它作为PEM),并确保一切工作在这方面的第一。
如果你已经这样做了,也许你可以从另外一台机器上试一下,以确保你使用的OpenSSL版本不会有什么奇怪的地方。
最后,尝试在s_client模式下使用OpenSSL:
openssl s_client -cert cert.pem -key req.pem -connect host:port -debug
看看事情在这个层面上是否有效。 如果是这样的话,那么wget有些东西是不可靠的,你可能需要重新构build或重新安装它。 如果不是这样,debugging输出的级别可能会帮助您找出问题,而不是wget的debugging输出。
我在这个网页上学习了一个星期,最后得到了我的帮助。
我用来连接的命令是:“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 “
我已经成功地使用了这样的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 。 retain.url有https://bla.bla.bla
但是,它现在提示我input“PEM密码短语”。
如果我input密码,它的工作正常, 但有没有人知道提示的方式?
有没有可能wget连接到端口80? 这个错误非常类似于我在testing中收到的错误,当我不小心听到了HTTP和HTTP 80和443-wget试图谈论SSL并没有得到它想要的响应。
获取networking捕获并将其加载到Wireshark中。 这应该会让您更清楚地了解SSL / TLS级别失败的情况。
在0.9.8版本中,SSLv3存在问题。
尝试传递-no_ticket以openssl s_client或者-ssl2工作