使用HTTPS从外部域到CloudFlare DNS的CNAME

时间:2015-10-08 11:13:20

标签: apache ssl https dns cloudflare

为客户开发的网站应该位于域test.clientdomain.com上,显然我无法控制此域名。

我使用CloudFlare作为DNS在test.mydomain.com上托管该网站。在我的服务器上,我有一个自签名SSL证书,我在CloudFlare上使用SSL选项Full SSL

因为生产服务器的IP地址可能会改变,所以我不想给客户端提供该服务器的IP地址(因此他可以在他的DNS文件中添加A记录)。我希望他们将test.clientdomain.com的CNAME记录添加到我的test.mydomain.com。在这种情况下,如果IP地址更改,我可以在我的DNS文件中更改它,客户不用担心。为了完成这项工作,我还设置了一个如下所示的vhost文件:

<VirtualHost *:80>
    ServerName test.clientdomain.com
    ServerAlias *.test.clientdomain.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/test.mydomain.com

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

    <Directory /var/www/html/test.mydomain.com>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride all
                    Order allow,deny
                    allow from all
    </Directory>
</VirtualHost>

此设置适用于HTTP。当我想添加HTTPS时,我也为端口443创建了一个vhost记录:

<IfModule mod_ssl.c>
    <VirtualHost *:443>
            ServerName test.clientdomain.com
            ServerAlias *.test.clientdomain.com

            DocumentRoot /var/www/html/test.mydomain.com

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

            SSLEngine on

            SSLCertificateFile      /etc/apache2/ssl/apache.crt
            SSLCertificateKeyFile /etc/apache2/ssl/apache.key

            <Directory /var/www/html/test.mydomain.com>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride all
                    Order allow,deny
            </Directory>
            BrowserMatch "MSIE [2-6]" \
                            nokeepalive ssl-unclean-shutdown \
                            downgrade-1.0 force-response-1.0
            # MSIE 7 and newer should be able to use keepalive
            BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

    </VirtualHost>
</IfModule>

我启用了CloudFlare代理,因此所有请求都通过CloudFlare代理,但由于某种原因,它会给我以下错误:

SSL connection error

ERR_SSL_PROTOCOL_ERROR

我在这个Apache上运行了几个其他的Web应用程序,都有一个用于HTTP和HTTPS的vhost文件,它们运行正常(所以自签名证书没有问题),唯一的区别在这种情况下,请求首先转到一个完全独立的域(test.clientdomain.com),而不是直接转到我自己的域*.mydomain.com

总而言之,test.clientdomain.com的DNS文件将包含:

CNAME test.clientdomain.com -> test.mydomain.com

test.mydomain.com的DNS文件将包含:

CNAME test.mydomain.com -> production.mydomain.com
A production.mydomain.com -> 123.123.123.123 (IP address of my production server)

我是否需要针对此用例配置不同的内容?

2 个答案:

答案 0 :(得分:1)

正如我从您的问题中可以理解的那样,您正在为该Apache中运行的各种Web应用程序使用相同的证书。因此,它必须是test.mydomain.comproduction.mydomain.com*.mydomain.com的证书。

但是,对于此访问权限,您需要test.clientdomain.com的证书。换句话说,证书的名称与URL中的名称不匹配,因此无法继续。 我不了解CloudFlare代理,所以我无法判断这个错误是否真的对名称的差异有意义,或者你还有另外一个问题。

我应该要求提供更多相关信息,但我没有足够的声誉来发表评论。希望这会有所帮助。

答案 1 :(得分:0)

通常来说,您不能将Cloudflare CDN好处用于来自外部域的CNAME,但如果CDN部分对您而言不重要,您仍然可以使用Cloudflare名称服务器和DNS区域管理。

只需确保已为您区域中的目标子域(在您的情况下为test.mydomain.com)禁用CDN,然后将传入的请求直接路由到您的服务器。

您可以通过查看DNS条目右侧的云图标来判断给定子域的CDN是否已激活:如果云为橙色,则CDN为活动状态;如果为灰色,则为CDN活动状态;

Cloudflare在其CDN基础结构中还支持外部CNAME解析(即提供其所有CDN优势),但仅适用于企业客户:
https://support.cloudflare.com/hc/en-us/articles/217371987-Managed-CNAME