• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

SSL/Apache-Problem mit KEY-Datei: Apache Server startet nicht!

testit

Well-Known Member
Themenstarter #1
Hallo,

ich schlage mich heute seit vielen Stunden mit einem Problem herum und finde keine Lösung:

Unter FreeBSD 10.4 + Apache 2.4.27 möchte ich für eine Domain ein SSL-Zertifikat einbinden.
Mein Domainprovider bietet für jede über ihn reg. Domain ein kostenloses Basis-Zertifikat von Symantec an.

Im SSL-Backend wird ein Befehl erzeugt, der auf Shelleben des Webservers einzugeben ist:

Code:
openssl req -new -newkey rsa:2048 -sha256 -nodes -out meine-domain.de.csr -keyout meine-domain.de.key -subj "/C=DE/ST=/L=/O=/CN=meine-domain.de"
Der erzeugte CSR wird anschließend im gleichen Backend für die Bestellung des Zertifikats genutzt.
Hatte mich gegen DNS-Challenge entschieden und stattdessen "file" ausgewählt.
Das klappte auch alles einwandfrei!

In einem Verzeichnis meines Servers liegen nun:
domain.key
domain-server.crt
domain-ca-.crt

In der httpd.conf wird u. a.
etc/apache24/extra/httpd-ssl.conf
inkludiert und mod_ssl.so etc. aktiviert.

In der httpd-ssl.conf
habe ich die Verweise auf die o. a. .key und .crt-Dateien gesetzt:

#öffentlicher Schlüssel
SSLCertificateFile "/usr/local/www/apache24/ssl-zertifikate/domain-server.crt"
#privater Schlüssel
SSLCertificateKeyFile "/usr/local/www/apache24/ssl-zertifikate/domain.key"
#Zertifikatskette
SSLCertificateChainFile "/usr/local/www/apache24/ssl-zertifikate/domain-ca-.crt"

Ein apachectl -configtest zeigt alles okay an, aber der Start leider nicht:

Code:
[Fri Oct 12 22:34:05.002655 2018] [ssl:emerg] [pid 42277] AH02572: Failed to configure at least one certificate and key for www.example.com:443
[Fri Oct 12 22:34:05.002882 2018] [ssl:emerg] [pid 42277] SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: DH PARAMETERS) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?
[Fri Oct 12 22:34:05.002902 2018] [ssl:emerg] [pid 42277] SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: EC PARAMETERS) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?
[Fri Oct 12 22:34:05.002922 2018] [ssl:emerg] [pid 42277] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[Fri Oct 12 22:34:05.002936 2018] [ssl:emerg] [pid 42277] AH02311: Fatal error initialising mod_ssl, exiting. See /var/log/httpd-error.log for more information
Alle bisherigen Versuche, des Rätsels Lösung zu finden und das Ganze endlich zum Laufen zu bringen, schlugen fehl.

Gelegentlich scheint es wohl am falschen Format der Key-Datei zu liegen.
Auch
openssl rsa -in domain.key -out domain-rsa.key
brachte keinen Erfolg.

Hat noch jemand eine Idee, was ich probieren könnte?


Danke und Gruße
testit
 

gadean

Well-Known Member
#2
Ich meine irgendwo vor kurzem gelesen zu haben, das seit einigen Versionen "SSLCertificateKeyFile"/"SSLCertificateFile" nicht mehr in der "server config" akzeptiert werden, nur noch im "virtualhost" Block.

Einen Versuch ist es auf jeden Fall wert.

Nachtrag:
Kann aber auch sein das ich das falsch verstanden hatte weil es mich nicht sonderlich interessierte. Ich hab die Anweisungen schon seit Jahren immer im vhost stehen.
 
#3
Du weißt, dass Symantec gerade aus sämtlichen Browsern raus fliegt? Nimm Lets Encrypt, da gibts auch schöne Anleitungen wie das zu konfigurieren ist :)
 

testit

Well-Known Member
Themenstarter #4
Ich meine irgendwo vor kurzem gelesen zu haben, das seit einigen Versionen "SSLCertificateKeyFile"/"SSLCertificateFile" nicht mehr in der "server config" akzeptiert werden, nur noch im "virtualhost" Block.

Einen Versuch ist es auf jeden Fall wert.

Nachtrag:
Kann aber auch sein das ich das falsch verstanden hatte weil es mich nicht sonderlich interessierte. Ich hab die Anweisungen schon seit Jahren immer im vhost stehen.
Hallo,

vielen Dank!

"Leider"" steht die Anweisung bereits im VirtualHost-Abschnitt (in der httpd-ssl.conf).

Viele Grüße
testit
 

testit

Well-Known Member
Themenstarter #5
Du weißt, dass Symantec gerade aus sämtlichen Browsern raus fliegt? Nimm Lets Encrypt, da gibts auch schöne Anleitungen wie das zu konfigurieren ist :)
Hi,

Nein, das wusste ich nicht, aber ich wollte sowieso ebenfalls LetsEncrypt unter FreeBSD testen, weil ich auch auf SynologyNAS einsetze.
Das Symantec-Basis-Zertifikat ist halt 1 Jahr gültig, sodass ich für die LetsEncrypt-Variante auch noch gleich die autom. Renewal-Geschichte angehen muss.

Viele Grüße
testit
 

testit

Well-Known Member
Themenstarter #6
Du weißt, dass Symantec gerade aus sämtlichen Browsern raus fliegt? Nimm Lets Encrypt, da gibts auch schöne Anleitungen wie das zu konfigurieren ist :)
Guten Morgen,

ich habe nun, in der Hoffnung, dass ich endlich ein nutzbares SSL-Zertifikat realisieren kann, das Ganze mit LetsEncrypt nach folgender Anleitung versucht:

https://kissitconsulting.com/blog/p...ite-using-lets-encrypt-and-automated-renewals

Es lief auch alles wie in der Anleitung beschrieben ab. Offenbar wird bei LetsEncrypt "SSLCertificateChainFile" in der Apache-Konfiguration nicht benötigt, weil dieses in "fullchain.pem" aufgeht/enthalten ist.

Lt. o. a. Anleitung habe ich dann folgendes in der vhost-Section geschrieben:

Code:
SSLCertificateFile "/usr/local/etc/letsencrypt/live/meinedomain.de/fullchain.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/meinedomain.de/privkey.pem"
apachectl configtest gibt an, dass alles okay sei.

Aber beim Starten via apachectl start werden wieder die gleichen Fehler wie beim Symantec-Basis-SSL-Zertifikat geworfen:

Code:
[Sat Oct 13 10:13:44.055207 2018] [ssl:emerg] [pid 48706] AH02572: Failed to configure at least one certificate and key for www.example.com:443
[Sat Oct 13 10:13:44.055523 2018] [ssl:emerg] [pid 48706] SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: DH PARAMETERS) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?
[Sat Oct 13 10:13:44.055563 2018] [ssl:emerg] [pid 48706] SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: EC PARAMETERS) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?
[Sat Oct 13 10:13:44.055597 2018] [ssl:emerg] [pid 48706] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[Sat Oct 13 10:13:44.055621 2018] [ssl:emerg] [pid 48706] AH02311: Fatal error initialising mod_ssl, exiting. See /var/log/httpd-error.log for more information
AH00016: Configuration Failed
Da es sich um die gleichen Fehlermeldungen handelt, die ich schon in meinem Ausgangsbeitrag i.V. mit dem Symantec-Basis-SSL-Zertifikat angeführt habe, muss offenbar auf meinem Server etwas anderes ursächlich dafür sein, dass die PEM-Read-Geschichte nicht korrekt funktioniert.

Natürlich habe ich gestern schon stundenlang im WWW nach diesen Fehlermeldungen gesucht, aber keiner der spärlichen Lösungsvorschläge brachte Erfolg.

Hat von Euch noch jemand eine Idee zur Ursache bzw. Problemlösung?

Danke und viele Grüße
testit

P.S.: Hier noch die VHOST-Section

Code:
<VirtualHost IP:443>

#HSTS Header
Header add Strict-Transport-Security "max-age=15724800"

# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling On
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors Off

ServerSignature Off

ServerAlias meinedomain.de
ServerName meinedomain.de
ServerAdmin webmaster@meinedomain.de
DocumentRoot /usr/local/www/htdocs/meinedomain
DirectoryIndex index.php index.htm
CustomLog /usr/local/www/htdocs/meinedomain/stats/logs/access.log combined
ErrorLog /usr/local/www/htdocs/meinedomain/stats/logs/error.log

<Directory />
        Options +FollowSymLinks
        Require all granted
        AllowOverride None
    </Directory>
    <Directory /usr/local/www/htdocs/meinedomain>
        Options +FollowSymLinks +Indexes
        Require all granted
                AllowOverride None
    </Directory>

SSLEngine On
SSLProtocol ALL -SSLv2 -SSLv3

SSLCipherSuite 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK'
SSLHonorCipherOrder On
SSLCompression Off
SSLInsecureRenegotiation Off
                                            
SSLCertificateFile "/usr/local/etc/letsencrypt/live/meinedomain.de/fullchain.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/meinedomain.de/privkey.pem"
SSLOptions +StrictRequire

#Konfiguration der einzelnen Verzeichnisse
<Directory "/usr/local/www/htdocs/meinedomain">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>

<Files ~ "\.(cgi|shtml|phtml|php?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/srv/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

</VirtualHost>
 

gadean

Well-Known Member
#7
Könntest du mal die Ausgabe von "apachectl -S" und von den aufgelisteten Configs posten?

"-S Show the settings as parsed from the config file (currently only shows the virtualhost settings)."
 

testit

Well-Known Member
Themenstarter #8
Hallo,

bevor Dein vorstehender Beitrag eingestellt wurde, war mir schon der "Kragen" geplatzt, da ich nicht das ganze sonnige Wochenende damit verbringen will, herauszufinden, wieso bei meinem Server etwas nicht rund läuft, dass gemeinhin funktioniert.

Ich habe letztlich die SSL-Zertifikate mit Hilfe von mod_md realisiert und dadurch zugleich noch den Vorteil, dass dieses Modul auch automatisch die Erneuerung vor Ablauf der 90 Tage übernimmt.

Hier ist die Vorgehensweise wunderbar beschrieben:
https://www.sudoers.net/2018/03/27/verschluesselung-mit-lets-encyrpt-und-apaches-mod_md

Viele Grüße
testit
 

gadean

Well-Known Member
#9
Alles klar und kann ich verstehen.
Von mod_md höre ich das erste mal und klingt sehr interessant (auch wenn ich es bei mir nicht einsetzten kann).
 

testit

Well-Known Member
Themenstarter #10
Unglaublich, wieviel Zeit einem diese Entwicklung erspart.

Einfach für die gewünschte Domain EINE Zeile wie bspw.
MDomain domain.tld
in der ssl.conf eingetragen und den Rest managed der Apache automatisch.

Klasse!

Viele Grüße
testit
 

testit

Well-Known Member
Themenstarter #12
Ich hatte auch testweise abgespeckte CipherSuites probiert: Gleiches Ergebnis,was aber auch nicht verwundert, da die Fehlermeldungen darauf hindeuten, dass schlicht die Key-Datei nicht richtig eingelesen oder decodiert werden kann.

Viele Grüße
testit
 

Binfort

Well-Known Member
#13
Die Ciphers sind gut so. Den Meldungen zu Folge, fehlten dem Apachen die Zeilen (mit erzeugten Parametern dazwischen):

Code:
 -----BEGIN EC PARAMETERS-----
 -----END EC PARAMETERS-----
 -----BEGIN DH PARAMETERS-----
 -----END DH PARAMETERS-----
Lt. Link kannst du sie dem Keyfile anhängen.
 

testit

Well-Known Member
Themenstarter #14
Hallo,

der eingangs genannte Befehl
Code:
openssl req -new -newkey rsa:2048 -sha256 -nodes -out meine-domain.de.csr -keyout meine-domain.de.key -subj "/C=DE/ST=/L=/O=/CN=meine-domain.de"
generiert derartige Zeilen nicht.

Möglicherweise hatte ich doch nicht bei den Tests den Diffie-Hellman (DH) key-exchange aus der CipherSuite mal rausgelassen.

Werde das nachholen und hier berichten, ob es daran lag!

Herzlichen Dank für Deinen Hinweis!

Viele Grüße
testit
 

Binfort

Well-Known Member
#15
Wie gesagt, deine Ciphers sind gut so. Mit dem DH Parameter kannst du die nachträgliche Entschlüsselung der Kommunikation verhindern.

Code:
openssl gendh 4096
Zusätzlich erzeugen, dann dem Apachen vorwerfen und gut. Der Punkt ist, falls du auf eine A+ Bewertung bei ssllabs.com wertlegst, kommst du um PFS nicht herum.
 

testit

Well-Known Member
Themenstarter #17
Hi Rob,

ich weiß ja, um welchen virtuellen Host es geht. Und bei diesem sind ja, wie o. a., die Parameter für
SSLCertificateFile, SSLCertificateKeyFile usw. angegeben worden.

@Binfort: A+Bewertung ist mir weniger wichtig!
Herzlichen Dank für Deine Hinweise!

Viele Grüße
testit
 

mr44er

Well-Known Member
#20
Habs hinbekommen, bin allerdings ein wenig anders vorgegangen.

www/apache24 mit md kompiliert und nicht den www/mod_md-devel.

httpd-ssl.conf:
Code:
Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin

SSLSessionCache "shmcb:/var/run/ssl_scache(512000)"
SSLStaplingCache "shmcb:/var/run/ssl_stapling(32768)"
SSLSessionCacheTimeout 300

SSLCipherSuite EECDH+AESGCM+AES256:EECDH+AES256:EDH+AES256
SSLProtocol -ALL -SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2

SSLHonorCipherOrder on
SSLUseStapling On

SSLStrictSNIVHostCheck Off
SSLCompression off

### MOD_MD

MDStoreDir etc/apache24/md
MDCertificateAgreement https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
MDomain meinedomain.de
httpd-vhosts.conf:
Code:
<VirtualHost lokalip:80>
        ServerName www.meinedomain.de
        ServerAlias meinedomain.de
        ServerAdmin meine@meinedomain.de   #trotz redirect wird die mail-adresse an dieser stelle fürs Initialisieren benötigt, ansonsten wird die Adresse in httpd.conf genommen.
        Redirect permanent / https://www.meinedomain.de/
</VirtualHost>

<VirtualHost lokalip:443>

SSLEngine on

        ServerName www.meinedomain.de
        ServerAlias meinedomain.de
        ServerAdmin meine@meinedomain.de
        DocumentRoot /usr/local/www/meineseiten/wordpress
          <Directory /usr/local/www/meineseiten/wordpress>
                AllowOverride None
                Require all granted
          </Directory>
        ErrorLog "/var/log/apache24/meinedomain.de-error.log"
        CustomLog "/var/log/apache24/meinedomain.de-access.log" combined

                        Alias /phpmyadmin "/usr/local/www/phpMyAdmin/"
                        <Directory "/usr/local/www/phpMyAdmin/">
                                AllowOverride None
                                Require all granted
                        </Directory>

        <IfModule dir_module>
            DirectoryIndex index.php index.html
            <FilesMatch "\.php$">
                SetHandler application/x-httpd-php
            </FilesMatch>
            <FilesMatch "\.phps$">
                SetHandler application/x-httpd-php-source
            </FilesMatch>
        </IfModule>

</VirtualHost>
httpd.conf:
Code:
Listen lokalip:80

#ServerAdmin you@example.com

#ServerName www.example.com:80

LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
LoadModule watchdog_module libexec/apache24/mod_watchdog.so
LoadModule ssl_module libexec/apache24/mod_ssl.so
LoadModule md_module libexec/apache24/mod_md.so


# Virtual hosts
Include etc/apache24/extra/httpd-vhosts.conf

# Secure (SSL/TLS) connections
Include etc/apache24/extra/httpd-ssl.conf
Wenn man es einmal begriffen hat, sehr schnuckelig einfach. :)
 
#21
Ich würde nicht zu mod_md raten, lieber den Certbot oder einen anderen separaten Client nehmen. Die Zertifikatsverwaltung hat IMHO in einem Webserver nichts zu suchen.

Rob