ssl连接失败wget,在浏览器中取得成功

我有一台运行Apache 2.4的服务器,提供各种提供https://连接的虚拟主机。

这些都是看起来是正确的,并在所有的浏览器工作正常。

但是,一个虚拟主机在使用wget时无法validation。 不幸的是我需要wget来为一些服务器端编程工作。

ERROR: cannot verify myvirtualhost.ca's certificate, issued by '/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2': Unable to locally verify the issuer's authority. 

在进一步的调查中,用这个命令debugging:

 openssl s_client -connect myvirtualhost.ca:443 -CApath /etc/ssl/certs 

validation失败的原因似乎是因为另一个服务器证书以某种方式卷入其中。

 CONNECTED(00000003) depth=0 OU = Domain Control Validated, CN = defaultdomain.com verify error:num=20:unable to get local issuer certificate verify return:1 depth=0 OU = Domain Control Validated, CN = defaultdomain.com verify error:num=27:certificate not trusted verify return:1 depth=0 OU = Domain Control Validated, CN = defaultdomain.com verify error:num=21:unable to verify the first certificate verify return:1 

因此,CN与服务器上的另一个虚拟主机(服务器返回的“defaultdomain.com”)相关。

任何想法如何解决这个问题?

如果您的服务器在一个IP地址上有多个HTTPS站点,则必须使用SNI来区分每个站点。

要使openssl s_client与SNI一起工作,您需要添加-servername <your fqdn>参数:

 openssl s_client -connect myvirtualhost.ca:443 -servername myvirtualhost.ca -CApath /etc/ssl/certs 

如果目的是让wget工作,使用标志“–no-check-certificate”,可能是不安全的,但是如果你需要wget工作,你可以使用它。

wget – 没有检查证书…