如何使用OpenSSLdebugging证书链?

我对OpenSSL是全新的,我正在阅读OpenSSL编程教程来连接服务器:

www.rtfm.com/openssl-examples/part1.pdf www.rtfm.com/openssl-examples/part2.pdf 

以某种方式设置正确的证书比预期更棘手… 🙁

当我用openssl s_clienttesting消息时:

openssl s_client -connect 123.456.789.0:666 -CAfile test.crt -debug

我收到错误消息

深度= 2 C = GB,ST =更大的曼彻斯特,L =索尔福德,O = COMODO CA有限公司,CN = COMODO RSA证书颁发机构validation错误:num = 20:无法获得本地颁发者证书validation返回:0

接着:

错误:14094412:SSL例程:SSL3_READ_BYTES:sslv3警报错误证书:s3_pkt.c:1257:SSL警报编号42 140685406562208:错误:140790E5:SSL例程:SSL23_WRITE:ssl握手失败:s23_lib.c:177:

这是证书链:

  Certificate chain 0 s:myself i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA 1 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority 2 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root 

我试图让系统认识这些证书是正确的几个小时,但无济于事…

我到现在为止所尝试的:

  • 通过使用update-ca-trust将COMODO证书添加到可信证书列表的各种变体。
  • 将证书添加到/ etc / ssl / certs中的可信证书列表中
  • 在文件夹中创buildpem文件并使用-CApath添加它们。
  • 谷歌的问题是,大多数教程从服务器pipe理员的angular度来讨论这个问题,但是我没有访问服务器的权限。

操作系统是Fedora。

是否有结构化的方法来解决这个问题?


编辑:证书创build如下:

  openssl req -new -x509 -sha256 -days 365 -key mykey.key -out test.crt 

一定要包括所有的中间证书,看看他们是最新的。 如果test.crt实际上是一个只包含/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root ,这是正确的方法。 你也可以包括根,大多数客户会接受这样的连锁店,但有一些会窒息。

一般来说,最好的做法是将所有的证书都包含在你的根目录下的最后一个证书中,以防客户端没有最后一个中间证书。

test.crt也可能包含除正确链之外的其他东西。 OpenSSL在默认情况下不会进行部分链式validation(在旧版本中,根本不会这样做)。 在这种模式下运行时,它并不关心/ etc / ssl / certs中的内容。

或者,您可能正在提交过期的中介证书。 CA经常使用相同的密钥重新certificate其中间体; 如果他们这样做,只需下载更新后的中间CA证书,并replace链中已过期的证书。

最后,使用openssl s_client,您需要指定它正在validation的内容。 例如,使用选项-CApath /etc/ssl/certs-CAfile your_ca.crt 。 对于第一个选项,使用系统的信任存储,对于第二个选项,指定根CA证书。