为什么我的SSL代码仅针对MY webserver失败?

dic*_*oce 0 c++ openssl

我有一个网络服务器,我在(www.trailmyx.com)上经营一家小型企业.最近我开始开发一些基本的SSL套接字代码(在C++中),我写了一个小的测试程序,它与OpenSSl连接并执行http GET.我可以在我自己的端口443(或任何其他网站)上成功使用我的客户端访问www.google.com.

当我在我自己的服务器上尝试SSL_get_verify_result(ssl)时,我回来了:X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT.

现在,当我在浏览器(https://www.trailmyx.com)上访问我的网站时,我可以检查证书,一切看起来都不错......它不会显示为自签名.

同样,当我对我的服务器使用wget时,我得到相同的自签名证书错误.

我的直觉是,不知何故我的网站配置错误,但如果是这样,浏览器怎么做呢?他们的一些其他OpenSSL调用序列是否为浏览器所知?

注意:当wget对我的服务器返回时,它会从证书中输出一些信息.这些信息都不是有效的(例如:/ C = - /ST = SomeState/L = SomeCity/O = SomeOrganization/OU = SomeOrganizationalUnit)我强烈怀疑,出于某种原因,在某些情况下,apache会返回自签名证书... 但为什么?浏览器是如何做到的?BTW- CURL工作得很好.

dr.*_*ren 5

我已经尝试过openssl s_client -connect www.trailmyx.com:443 -showcerts它确实会将您的证书显示为自签名:

Server certificate subject=/C=--/ST=SomeState/L=SomeCity/O=SomeOrganization/OU=SomeOrganizationalUnit/CN=ip-97-74-119-124.ip.secureserver.net/emailAddress=root@ip-97-74-119-124.ip.secureserver.net issuer=/C=--/ST=SomeState/L=SomeCity/O=SomeOrganization/OU=SomeOrganizationalUnit/CN=ip-97-74-119-124.ip.secureserver.net/emailAddress=root@ip-97-74-119-124.ip.secureserver.net

也许您的服务器正在使用服务器名称指示(SNI)来允许基于名称的虚拟主机在SSL中组合使用?

更新:我的预感是正确的:您需要使用SNI和TLS才能使用它.此命令显示预期的证书:

openssl s_client -connect www.trailmyx.com:443 -servername www.trailmyx.com -tls1