由于各种原因,我创建了一个简单的HTTP服务器,并通过OpenSSL添加了SSL支持。我正在使用自签名证书。只要我将CA添加到受信任的根CA,IE,Firefox和Chrome就会愉快地加载内容。
然而,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客户端是否不能使用自签名证书?
更新
对于后来出现的任何人,添加此代码有助于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);
答案 0 :(得分:11)
我查看了wget
的手册页,--no-check-certificate
似乎只影响服务器证书。您需要在本地将自签名证书指定为有效的CA证书。
为此,请在--ca-certificate=...
和[{1}}案例中将证书指定为wget
,并-CAfile
。
答案 1 :(得分:5)
您还可以通过多种方式之一将受信任的根CA证书安装到OpenSSL中: