将Apache VirtualHost设置为正确的SNI握手

时间:2015-02-24 17:28:20

标签: apache ssl sni

我遇到的问题是Apache机器与客户端预期的服务器名称不匹配,导致出现警告:

TLSv1.2记录层:警报(级别:警告,描述:无法识别的名称)

我很确定这与我的VirtualHost配置有关。虽然我为所有主机设置了ServerName和ServerAlias,但服务器没有发回服务器名称。

这是我的Apache配置:

<VirtualHost *:80>
    ServerName example.io
    ServerAlias example.io
    Redirect permanent / https://example.io
</VirtualHost>

<VirtualHost *:80>
    ServerName api.example.io
    ServerAlias api.example.io
    Redirect permanent / https://api.example.io
</VirtualHost>

<VirtualHost *:80>
    ServerName store.example.io
    ServerAlias store.example.io
    Redirect permanent / https://store.example.io
</VirtualHost>

<VirtualHost *:443>
    ServerName example.io
    ServerAlias example.io
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile /path/file.crt
    SSLCertificateKeyFile /path/file.key
    SSLCertificateChainFile /path/file.crt

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

这不是SNI的问题,而是缺少链证书。来自SSLLabs的报告:

Chain issues    Incomplete
...
2   Extra download  RapidSSL SHA256 CA - G3 
Fingerprint: 0e34141846e7423d37f20dc0ab06c9bbd843dc24 

桌面浏览器通常会从其他网站缓存这些缺失的链证书或下载它们。在这种情况下,其他应用程序或移动浏览器大多只会失败。

除此之外,您还有其他设置问题,例如提供弱密码(RC4)和协议(SSL3.0)。

  

TLSv1.2记录层:警报(级别:警告,描述:无法识别的名称)

这可能是因为您有一个ServerName example.io但客户端使用的www.example.io与您提供的ServerName不匹配。您不会在客户端收到错误,因为证书与客户端使用的名称匹配。你应该使用

 ServerAlias example.com *.example.com

让这个警告消失。