2009-10-29 114 views
10

由于各种原因,我创建了一个简单的HTTP服务器,并通过OpenSSL添加了SSL支持。我正在使用自签名证书。只要将CA添加到受信任的根CA,IE,Firefox和Chrome就可以愉快地加载内容。wget,自签名证书和自定义HTTPS服务器

然而,wget的(使用--no-check-certificate标志,即使)报道:

OpenSSL: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure 

如果我使用运行OpenSSL的客户对我的服务器:

openssl s_client -connect dnvista:82 -debug 

我回去: 校验错误: num = 19:证书链中的自签名证书 验证返回:0 然后

5852:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:.\ssl\s3_pkt.c:1060:SSL alert number 40 
5852:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:.\ssl\s23_lib.c:188: 

wget和OpenSSL客户端是否无法使用自签名证书?

UPDATE:

对于走来后,添加此代码帮助与OpenSSL的客户端和Firefox人:

EC_KEY *ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); 
SSL_CTX_set_tmp_ecdh(ctx, ecdh); 
EC_KEY_free(ecdh); 

回答

11

我检查的wget手册页和--no-check-certificate似乎只影响服务器证书。您需要在本地指定您的自签名证书作为有效的CA证书。

要做到这一点,指定证书为--ca-certificate=...wget-CAfiles_client情况。

+5

嗨。我见过很多像这样的评论,“尽快打开检查”。这是一个真正的_BAD_想法**。有点像湿滑路面上的秃头轮胎街头赛车。我很失望,这个答案得到了'嘀'的印记。 – will 2011-03-07 11:49:36

+5

会:我同意,通过检查通常是一个坏主意。我的答案提出了一种使客户知道CA证书的方法,以便可以正确执行检查。 – 2011-03-13 17:15:00

5

您还可以安装受信任的根CA证书到OpenSSL的在多种方式中的一种:

+0

我发布了一个问题:[Ruby OpenSSL为您的应用程序代码设置或配置](http://stackoverflow.com/questions/5233169/ruby-openssl-set-up-or-configuration-for-your-application-代码),要求_HOW_ Ruby获取PEM或CRT资源来执行主机验证。我已经详尽地寻找了一个模块,用递归的** grep **扫描加载环境或配置信息 - 没有运气(除了在测试和样本中)。 – will 2011-03-14 10:41:26