这是我的问题。 我在一个apache webserver上托管了多个域。 (虚拟主机) 其中两个(a.com和b.com)使用ssl证书。 我使用这些命令配置了两个:
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/ABC.crt
SSLCertificateKeyFile /etc/apache2/ssl/ABC.key
SSLCertificateChainFile /etc/apache2/ssl/ABC.chain.crt
SSLProtocol all -SSLv2
当我尝试通过浏览器(chrome,Firefox,IE)连接时,它工作正常,我得到了正确的证书。 但是在android上我得到了一个例外:没有对等证书
然后我尝试用这个命令测试它:
openssl s_client -connect b.com:443
它返回了a.com的证书。 有什么建议我做错了,我用openssl和android得到了错误的证书?
答案 0 :(得分:12)
在同一IP地址上可能有多个主机,您需要使用服务器名称指示(SNI)来访问此站点。对于openssl s_client
-servername
使用openssl s_client -connect b.com:443 -servername a.com
选项的SNI,例如{{1}}。至于android:根据https://developer.android.com/training/articles/security-ssl.html,对于HttpsURLConnection,支持SNI,但对于Apache HTTP Client则不支持SNI。