web-dev-qa-db-ja.com

Dockerコンテナで動作するSSLを取得できません

私はサーバー管理者ではなく、知らないことがたくさんあると言って始めましょう。このため、SSLが機能しないため、Dockerコンテナの設定のどこかで間違いを犯したと確信しています。

コンテナは、Ubuntu 14.04でPHP 5.6を使用してApache 2.4を実行しており、MySQL 5.6 Dockerコンテナにリンクされています。

Dockerからこの基本的なセットアップを開始しました- Official PHP Repo 。関連するファイルは次のとおりです。

Dockefile

FROM php:5.6-Apache

RUN apt-get update
RUN apt-get install -y net-tools
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-install sockets

RUN a2enmod rewrite
RUN a2enmod ssl

ADD 000-default.conf /etc/Apache2/sites-enabled/
ADD default-ssl.conf /etc/Apache2/sites-anabled/
ADD Apache2.conf /etc/Apache2/
ADD www-server/ www-server/

EXPOSE 443

000-default.conf

<VirtualHost *:80>

    ServerAdmin webmaster@localhost
    DocumentRoot /www-server/

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

</VirtualHost>

<Directory /home/www-server/>
    # allow .htaccess overrides to work
    AllowOverride All
    DirectoryIndex login.html index.html index.php
</Directory>

<Directory /home/www-server/client>
    DirectoryIndex home.html
    Options All
    AllowOverride All
    Require all granted
</Directory>

default-ssl.conf

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /home/www-server

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

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

        SSLCertificateFile /etc/ssl/certs/site.crt
        SSLCertificateKeyFile /etc/ssl/certs/site.key
        SSLCACertificatePath /etc/ssl/certs/digicert/

     </VirtualHost>
</IfModule>

Apache2.conf

Mutex file:/var/lock/Apache2 default
PidFile /var/run/Apache2/Apache2.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User www-data
Group www-data
HostnameLookups Off
ErrorLog /proc/self/fd/2
LogLevel warn

IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# ports.conf
Listen 80
<IfModule ssl_module>
        Listen 443
</IfModule>
<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /home/www-server/>
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

DocumentRoot /home/www-server

AccessFileName .htaccess
<FilesMatch "^\.ht">
        Require all denied
</FilesMatch>

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

CustomLog /proc/self/fd/1 combined

<FilesMatch \.php$>
        SetHandler application/x-httpd-php
</FilesMatch>

# Multiple DirectoryIndex directives within the same context will add
# to the list of resources to look for rather than replace
# https://httpd.Apache.org/docs/current/mod/mod_dir.html#directoryindex
DirectoryIndex disabled
DirectoryIndex index.php index.html

IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf

[〜#〜] note [〜#〜]:これらのファイルの無関係な部分を削除しました。

Dockerコンテナーを実行するには、これを使用します。

Sudo docker run -v /home/src/ssl-cert:/etc/ssl/certs --name app-gateway --link mysql56:mysql -p 80:80 -p 443:443 -d  app-image

ログファイルのセクションは次のとおりです。

::1 - - [10/Nov/2015:19:26:19 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.4.10 (Debian) PHP/5.6.15 OpenSSL/1.0.1k (internal dummy connection)"
::1 - - [10/Nov/2015:19:26:20 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.4.10 (Debian) PHP/5.6.15 OpenSSL/1.0.1k (internal dummy connection)"
72.5.190.136 - - [10/Nov/2015:19:26:21 +0000] "\x16\x03\x01" 400 0 "-" "-"
72.5.190.136 - - [10/Nov/2015:19:26:21 +0000] "\x16\x03\x01" 400 0 "-" "-"
72.5.190.136 - - [10/Nov/2015:19:26:21 +0000] "\x16\x03\x01" 400 0 "-" "-"

ブラウザでこのエラーが発生した場合:

ERR_SSL_PROTOCOL_ERROR

TL; DRDockerコンテナにSSL証明書をインストールして使用するためにオンラインで見つけたすべての手順に従いましたが、成功しませんでしたそれを機能させることで。 SSLをDockerコンテナで機能させるために見落としている明らかなものはありますか?

21
Jay Blanchard

場合によっては、特に長い間問題を解決しようとしていて、コマンドラインのコンソールウィンドウでコーディングしている場合、最も単純なものを見逃します。 Dockerfileの次の2行をご覧ください。

ADD 000-default.conf /etc/Apache2/sites-enabled/
ADD default-ssl.conf /etc/Apache2/sites-anabled/

aeとほとんど区別がつかないため、ミススペルを見つけるのが難しくなります。 Dockerfileはイメージを正しくビルドし、addsコンテナ内の新しいディレクトリを作成し、そのディレクトリ内に構成ファイルを配置します。

drwxr-xr-x  2 www www  4096 Nov 11 15:56 sites-anabled
drwxr-xr-x  2 www www  4096 Oct 23 20:19 sites-available
drwxr-xr-x  2 www www  4096 Nov 11 15:56 sites-enabled

不明なディレクトリに対してエラーがスローされず、イメージが正常にビルドされるため、実行されますが、この場合、SSLは適切に機能しません。

33
Jay Blanchard