由于各种原因我已经创建了一个简单HTTP服务器,并加入SSL支持通过OpenSSL。我使用的是自签证书。即Firefox和铬愉快地加载内容,只要我加入CA到信任的根CAs。

然而,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);
有帮助吗?

解决方案

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

为此,请在--ca-certificate=...案例中将证书指定为-CAfile,并在s_client情况下指定<=>。

其他提示

你也可以安装信任的根源证书进OpenSSL在一些方面:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top