Ich versuche, ein HTTPS zu konfigurieren, aber es funktioniert nicht und ich weiß nicht wirklich, was falsch ist.
Dies sind die Schritte, die ich befolgt habe:
Ich habe ein
.pem
Zertifikat (Zertifikat + Kette) generiert mitlasst uns verschlüsseln, indem Sie den nächsten Befehl verwenden:sudo -H ./letsencrypt-auto certonly --server https://acme-v01.api.letsencrypt.org/directory
Die Antwort lautet:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/xxxx.com/fullchain.pem. Your cert
will expire on 2016-03-07. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Ich habe einen privaten Schlüssel generiert
sudo openssl req -new -x509 -days 365 -nodes -out /etc/letsencrypt/live/xxxx.com/fullchain.pem -keyout /etc/letsencrypt/live/xxxx.com/fullchain.key
Hier unten füge ich die Antwort ein:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:xxxx
Locality Name (eg, city) []:xxxx
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxxx
Organizational Unit Name (eg, section) []:xxxx.com
Common Name (e.g. server FQDN or YOUR name) []:test
Email Address []:[email protected]
Ich habe überprüft, ob der Schlüssel den richtigen Wert zurückgibt, den ich im letzten Schritt festgelegt habe:
sudo openssl x509 -in /etc/letsencrypt/live/xxxx.com/fullchain.pem -noout -subject
Hier unten füge ich die Antwort ein:
subject= /C=US/ST=xxxx/L=xxxx/O=xxxx/OU=xxxx.com/CN=test/
[email protected]
Ich habe einen neuen virtuellen Host eingerichtet, den ich hier unten kopiere:
<VirtualHost *:443> ServerAdmin [email protected] DocumentRoot /var/www/html/xxx1/public ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ServerName xxxx.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/xxxx.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/xxxx.com/fullchain.key <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 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost>
Ich habe Port 443 auf meinem geöffnet
/etc/apache2/ports.conf
.
Nach all diesen Schritten muss ich nur noch Folgendes tun sudo service apache2 restart
, aber die Konsole wartet nur, bis ich Folgendes bekomme:
Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.
und wenn ich es debugge, journalctl -xe
kommt folgendes Ergebnis:
-- Unit apache2.service has begun starting up.
Dec 08 19:12:20 devXxxx apache2[21637]: * Starting web server apache2
Dec 08 19:12:20 devXxxx apache2[21637]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 100.114.32.17. Set the 'ServerName' directive globally to suppress this mes
Dec 08 19:12:20 devXxxx apache2[21637]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:443
Dec 08 19:12:29 devXxxx sudo[21613]: pam_unix(sudo:session): session closed for user root
Dec 08 19:12:29 devXxxx polkitd(authority=local)[996]: Unregistered Authentication Agent for unix-process:21628:9475994 (system bus name :1.109, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, loca
Dec 08 19:12:40 devXxxx apache2[21637]: *
Dec 08 19:12:40 devXxxx apache2[21637]: * The apache2 instance did not start within 20 seconds. Please read the log files to discover problems
Dec 08 19:12:40 devXxxx systemd[1]: apache2.service: Control process exited, code=exited status=1
Dec 08 19:12:40 devXxxx systemd[1]: Failed to start LSB: Apache2 web server.
-- Subject: Unit apache2.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit apache2.service has failed.
Nachdem ich diese 20 Sekunden beobachtet habe, die Apache zu laden versucht, habe ich beschlossen, das Zertifikat wie folgt zu testen:
Überprüfen, ob nur 1 Zertifikat vorhanden ist:
sudo ln -s /etc/letsencrypt/live/xxxx.com/fullchain.pem
sudo openssl x509 -hash -noout -in /etc/letsencrypt/live/xxxx.com/fullchain.pem.0
Überprüfen, ob das Zertifikat funktioniert:
openssl verify -CApath f6361f65.0
aber Überraschung, das passiert nicht ... das Terminal versucht weiterhin, eine Verbindung herzustellen, ohne eine Reaktion zu erhalten.
Kann mir jemand helfen?
Vielen Dank für den Rat.
Antwort1
Zunächst einmal sieht es so aus, als wäre bereits etwas an den Port gebunden 443
:
Dez 08 19:12:20 devXxxx apache2[21637]: (98)Adresse wird bereits verwendet: AH00072: make_sock: konnte nicht an Adresse [::]:443 D binden
Als nächstes müssen Sie mit Lets Encrypt keinen eigenen privaten Schlüssel einrichten, das Skript sollte einen für Sie generieren (es sei denn, Sie generieren Ihren eigenen CSR manuell).
Wenn das letsencrypt-auto
Skript abgeschlossen ist, sollten sich in Ihrem Zertifikatsverzeichnis 4 Dateien befinden.
cert.pem
- Dies ist Ihr Zertifikat. In ApacheSSLCertificateFile
sollte es auf diese Datei verweisen.privkey.pem
- Dies ist Ihr privater Schlüssel. BEHALTEN SIE IHN GEHEIM. In ApacheSSLCertificateKeyFile
sollte er auf diese Datei verweisen.chain.pem
- Dies ist die Zertifikatskette, die Ihr Vertrauen begründet. In Apache können SieSSLCertificateChainFile
auf diese Datei verweisen.fullchain.pem
- Dies ist eine Kombination auscert.pem
undchain.pem
, also Ihr Zertifikat und seine vollständige Vertrauenskette. Zeigen Sie in ApacheSSLCACertificateFile
auf diese Datei.
Antwort2
Für letscypt funktioniert dieser Befehl bei mir, ohne den Server zu stoppen
./letsencrypt-auto certonly --webroot -w /websitedir -d www.domain.com
Nach diesem Vorgang für Nginx können Sie die Zertifikate verknüpfen.
ln -s privkey.pem /etc/ssl/domain.key
ln -s fullchain.pem /etc/ssl/domain.crt