apache虚拟主机提供不正确的证书

时间:2017-06-28 16:53:19

标签: apache ssl virtualhost

我的一个虚拟主机似乎使用以下配置显示错误的证书:

<VirtualHost *:80>                                                                        

        # Address                                                                         
        ServerName              git.mclarkdev.com                                         
        ServerAlias             158.69.115.69                         

        # Force Git                                                                       
        RewriteCond             %{HTTP_HOST} !^git\.mclarkdev\.com             [NC]       
        RewriteRule             ^ http://git.mclarkdev.com                     [R=301,L]  

        # Force Secure                                                                    
        RewriteCond             %{HTTPS}        !=on                                      
        RewriteRule             ^/?(.*)         https://git.mclarkdev.com/$1 [R,L]        
</VirtualHost>                                                                            

<VirtualHost *:443>                                                                       

        # Address                                                                         
        ServerName              git.mclarkdev.com                                         
        ServerAlias             158.69.115.69

        # Force Git                                                                       
        RewriteCond             %{HTTP_HOST} !^git\.mclarkdev\.com             [NC]       
        RewriteRule             ^ https://git.mclarkdev.com                     [R=301,L] 

        # Proxy Gogs                                                                      
        ProxyPass               /               http://git:3000/                          
        ProxyPassReverse        /               http://git:3000/                                                      

        # Certificates                                                                    
        SSLCertificateFile      /etc/ssl/certs/mclarkdev.com/git.mclarkdev.com.crt        
        SSLCertificateKeyFile   /etc/ssl/certs/mclarkdev.com/git.mclarkdev.com.key        
        SSLCACertificateFile    /etc/ssl/certs/mclarkdev.com/git.mclarkdev.com.ca-bundle  

        # SSL Config
        SSLEngine on
        SSLCipherSuite AES256+EECDH:AES256+EDH:AES128+EECDH:AES128+EDH
        SSLProtocol -ALL -SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2
        SSLHonorCipherOrder on
        SSLStrictSNIVHostCheck Off
        SSLCompression off
        SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire                                                                                                     
</VirtualHost>

此处的预期行为如下:

我现在的问题是,在第四个用例中,我没有获得git的证书,而是我的根证书。

  

此服务器无法证明它 158.69.115.69 ;其安全证书来自 mclarkdev.com

我的根域的虚拟主机与此非常相似,但

除外
ServerName              www.mclarkdev.com
ServerAlias             mclarkdev.com

尽管将IP地址定义为别名,为什么git子域会显示根证书?

点击地址和拖尾日志,我看到通过root vhost进入请求的条目

在CentOS 7上运行httpd,
服务器版本:Apache / 2.4.6(CentOS)
服务器内置:2016年11月14日18:04:44

2 个答案:

答案 0 :(得分:0)

也许它与你有一个循环有关。

尝试更改<VirtualHost *:80>,来自:

RewriteRule ^ http://git.mclarkdev.com [R=301,L]

RewriteRule ^ https://git.mclarkdev.com [R=301,L]

注意http s

答案 1 :(得分:0)

您不能将158.69.115.69用作ServerAliasServerNameServerAlias只应列出FQDN或通配符(例如*domain.com)。

访问158.69.115.69时,您实际上会使用默认的vhost或全局Apache conf,而不是git.mclarkdev.com vhost。

然后,您获得mclarkdev.com的默认服务器证书,当然,您的重写规则未应用,因为它仅在其他虚拟主机中定义。

您应该将此规则添加到默认虚拟主机中,以确保其余内容发生在您在此处共享的2个虚拟主机中。

您还可以更改vhosts顺序,并确保在git.mclarkdev.com之前定义了2 mclarkdev.com个vhost。在这种情况下,它将成为默认值并访问它,IP实际上就像访问git.mclarkdev.com

如果您使用sites-enabled类似发行版配置,则可以重命名符号链接(例如,重命名您的虚拟主机文件000-something)以确保它们首先包含在内。事实上,由于这个特定的原因,默认的vhost通常被称为000-default,你可能也需要重命名它。

  

PS:请注意,尽管做了所有这些操作,您仍可能在重定向之前收到This server could not prove that it is 158.69.115.69; its security certificate is from git.mclarkdev.com.警告,   仅仅因为https不是通过IP访问的。证书   仅基于名称。