2015-11-10 12 views
13

Lassen Sie mich damit beginnen, dass ich kein Serveradministrator bin und es viele Dinge gibt, die ich nicht kenne. Aus diesem Grund bin ich sicher, dass ich bei der Einrichtung meines Docker-Containers einen Fehler gemacht habe, da SSL nicht funktioniert.SSL kann nicht im Docker-Container arbeiten

Der Container läuft mit Apache 2.4 mit PHP 5.6 unter Ubuntu 14.04 und ist mit einem MySQL 5.6 Docker Container verbunden.

Ich begann mit dieser grundlegenden Einrichtung von Docker - Official PHP Repo. Hier sind die relevanten Dateien:

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 [email protected] 
    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

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 

HINWEIS: Ich habe nicht relevante Teile dieser Dateien entfernt.

Um die Docker Behälter ich diese verwenden laufen:

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 

Hier ist ein Abschnitt der Protokolldateien:

::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 "-" "-" 

Mit diesem Fehler im Browser:

ERR_SSL_PROTOCOL_ERROR

TL; DR Ich habe alle Schritte verfolgt, die ich online gefunden habe, um meine SSL-Zertifikate in einem Docker-Container zu installieren und zu verwenden, aber ich hatte keinen Erfolg dabei. Gibt es etwas Offensichtliches, das ich übersehen habe, damit SSL in einem Docker-Container funktioniert?

Antwort

16

Manchmal, besonders wenn Sie lange versucht haben, ein Problem zu lösen, und Sie in einem Konsolenfenster in der Befehlszeile codieren, vermissen Sie die einfachsten Dinge. Werfen Sie einen Blick auf diese beiden Linien in der Dockerfile:

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

Die a fast nicht zu unterscheiden von einem e ist, so dass die falsche Schreibweise schwer zu finden. Die Dockerfile erstellt das Image korrekt und fügt das neue Verzeichnis in dem Container hinzu und speichert dann die Konfigurationsdatei in diesem Verzeichnis.

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 

Da kein Fehler für ein unbekanntes Verzeichnis geworfen wird und das Bild baut erfolgreich läuft, aber in diesem Fall ist die SSL nicht angemessen funktionieren.

+10

Jetzt muss das weh tun – RiggsFolly

+1

Hoooo Junge, tut es tatsächlich. Und * mehrere * Leute haben es verpasst @RiggsFolly –

+0

Deshalb mag ich IDEs, die Rechtschreibprüfungen haben :) –

Verwandte Themen