2 个证书问题

OpenSSL used with CRLs and for some CA in the certificate chain its CRL is not included in TLSCRLFile

在TLS服务器日志中,若对端使用OpenSSL时:

failed to accept an incoming connection: from 127.0.0.1: TLS handshake with 127.0.0.1 returned error code 1: \
           file s3_srvr.c line 3251: error:14089086: SSL routines:ssl3_get_client_certificate:certificate verify failed: \
           TLS write fatal alert "unknown CA"

在TLS服务器日志中,若对端使用GnuTLS时:

接受传入连接失败:来自127.0.0.1:与127.0.0.1的TLS握手返回错误代码1:
file rsa_pk1.c第103行:错误:0407006A:rsa例程:RSA_padding_check_PKCS1_type_1:
块类型不是01 file rsa_eay.c第705行:错误:04067072:rsa例程:RSA_EAY_PUBLIC_DECRYPT:填充

CRL 已过期或将在服务器运行期间过期

OpenSSL,在服务器日志中:

  • 过期前:

无法连接到proxy "proxy-openssl-1.0.1e":TCP连接成功,但无法与[[127.0.0.1]:20004]建立TLS连接:
SSL_connect()返回SSL_ERROR_SSL:file s3_clnt.c第1253行:错误14090086:
SSL例程:ssl3_get_server_certificate:证书验证失败:
TLS写入致命警报"证书已吊销"

  • 过期后:

无法连接到proxy "proxy-openssl-1.0.1e":TCP连接成功,但无法与[[127.0.0.1]:20004]建立TLS连接:
SSL_connect()返回SSL_ERROR_SSL:file s3_clnt.c第1253行:错误14090086:
SSL例程:ssl3_get_server_certificate:证书验证失败:
TLS写入致命警报"证书已过期"

关键在于:当CRL有效时,被吊销的证书会报告为"证书已吊销"。而当CRL过期后,错误信息会变为"证书已过期",这相当具有误导性。

GnuTLS,在服务器日志中:

  • 过期前后相同:

无法连接到proxy "proxy-openssl-1.0.1e":TCP连接成功,但无法与[[127.0.0.1]:20004]建立TLS连接:
无效的对等证书:该证书不受信任。证书链已被吊销。

自签名证书,未知 CA

OpenSSL,日志中显示:

error:'self signed certificate: SSL_connect() set result code to SSL_ERROR_SSL: file ../ssl/statem/statem_clnt.c\
             line 1924: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:\
             TLS write fatal alert "unknown CA"'

当服务器证书错误地具有相同的颁发者和主体string时(尽管它是由CA签名的),就会观察到这种情况。在Top级别的CA证书中,颁发者和主体是相同的,但在服务器证书中它们不能相同。(同样适用于proxy和agent证书。)