首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker容器虚拟主机SSL配置

Docker容器虚拟主机SSL配置
EN

Stack Overflow用户
提问于 2017-11-09 17:57:47
回答 1查看 6.8K关注 0票数 4

我有以下设置和正常工作(我在码头1.6):

一个Docker容器充当在单个Docker容器中运行的其他web应用程序的虚拟主机代理。(我要补充的是,我并不擅长配置服务器或网络。)

我一直试图将SSL添加到安装程序中,但收效甚微。每个容器为证书在主机上挂载文件目录。例如,使用以下命令运行容器:

代码语言:javascript
复制
docker run -d -P --name build \
    -v /home/applications/src/ssl-cert:/etc/ssl/certs \
    -e "DBL=mysql:dbname=build;host=192.168.0.1;port=3306" \
    -e "DB_USER=foo" -e "DB_PASS=bar" \
    --link mysql56:mysql \
    --add-host dockerhost:`/sbin/ip addr | grep 'eth0' | grep 'inet' | cut -d'/' -f1 | awk '{print $2}'` \
    -p 8001:80 -p 4431:443 \
     repos/build:latest

如果试图连接到https://build.example.com,则会收到证书错误,无法连接。容器的Apache配置在默认情况下对证书文件具有适当的配置-ssl.conf(如果这是一个独立实例的话):

代码语言:javascript
复制
<VirtualHost _default_:443>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/html/

    # Enable/Disable SSL for this virtual host.
    SSLEngine on

    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder On
    SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

    SSLCertificateFile /etc/ssl/certs/build.crt
    SSLCertificateKeyFile /etc/ssl/certs/build.key
    SSLCACertificateFile /etc/ssl/certs/digicert/digicertca.crt

    #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
    </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>

然后,我尝试为代理容器运行以下命令:

代码语言:javascript
复制
docker run -it -d -P --name apache_proxy \
    -v /home/applications/src/ssl-cert:/etc/ssl/certs \
    -p 8000:80 -p 443:443 \
    repos/apache-proxy:latest

这个容器还包含相同的默认值-ssl.conf。

我尝试过在几种不同的配置中运行这个程序:

  • 仅在Apache代理容器中运行SSL配置
  • 仅在构建应用程序容器中运行SSL配置。
  • 在两个容器中运行SSL配置。

如果我觉得我错过了什么显而易见的东西,但却不能指手画脚。在像这样的配置中运行SSL时,是否缺少一些东西?

EN

回答 1

Stack Overflow用户

发布于 2017-12-09 14:39:10

通常,如果您的服务器运行在apache服务器后面,则只需配置Apache以处理SSL证书。如果Apache是唯一“外部”公开的服务器,而其他服务器不能从外部世界直接访问,则会发生这种情况。

您需要apache通过url或端口将其代理到其他服务器,例如:

代码语言:javascript
复制
<VirtualHost *:443>
    ServerName SERVERNAME_HERE

    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder On
    SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

    SSLCertificateFile /etc/ssl/certs/build.crt
    SSLCertificateKeyFile /etc/ssl/certs/build.key
    SSLCACertificateFile /etc/ssl/certs/digicert/digicertca.crt

    # Proxy pass to other server
    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / http://OTHER_SERVER_IP_WITHIN_DOCKER_NETWORK:8081/
    ProxyPassReverse / http://OTHER_SERVER_IP_WITHIN_DOCKER_NETWORK:8081/

<!--Other config-->
</VirtualHost>

希望这能帮到你..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47208598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档