Let’s encrypt auf dem Raspberry Pi einzurichten ist nicht sonderlich schwer. Ich setzte voraus, dass hier schon, wie bei mir, ein Apache2 läuft.
Zuerst wird Git installiert, wenn nicht schon vorhanden.
1 |
sudo apt-get install git |
Dann wechselt man in /opt, ladet den ACME Client von Let’s Encrypt herunter und installiert diesen.
1 |
cd /opt |
1 |
sudo git clone https://github.com/letsencrypt/letsencrypt |
1 |
cd letsencrypt |
1 |
./letsencrypt-auto --help |
1 |
./letsencrypt-auto certonly --rsa-key-size 4096 -d domain.tld -d www.domain.tld |
Im Anschluss wird Let’s Encrypt an den Apache angepasst.
1 |
./letsencrypt-auto --apache |
Nun sollte der Raspberry Pi via https erreichbar sein.
Um das Zertifikat zu erneuern, führt man folgenden Befehl aus:
1 |
/opt/letsencrypt/letsencrypt-auto certonly --renew-by-default --rsa-key-size 4096 -d domain.tld -d www.domain.tld |
Man bestätigt den eingesetzten Server Apache, wie schon zuvor bei der Installation
und startet diesen im Anschluss neu.
1 |
sudo /etc/init.d/apache2 reload |
Der Originalclient ist auch der schäbigste.
Passt.
ich nutze das Bash-Skript von https://github.com/lukas2511/dehydrated
Kommt mit wenigen Abhängigkeiten aus (kein git nötig!) und funktioniert bisher ohne ein Problem.
[…] funktioniert. Zur Erstellung eines validen SSL-Zertifikats kann man auf die Anleitung „Let’s Encrypt auf dem Raspberry Pi“ zurück […]
[…] Umstellung auf HTTPS wurde nach der Anleitung „Let’s Encrypt auf dem Raspberry Pi“ […]
Oje…
Requesting to rerun ./letsencrypt-auto with root privileges…
Bootstrapping dependencies for Debian-based OSes… (you can skip this with –no-bootstrap)
Hit:1 http://archive.raspberrypi.org/debian buster InRelease
Hit:2 http://raspbian.raspberrypi.org/raspbian buster InRelease
Reading package lists… Done
Reading package lists… Done
Building dependency tree
Reading state information… Done
augeas-lenses is already the newest version (1.11.0-3).
ca-certificates is already the newest version (20190110).
gcc is already the newest version (4:8.3.0-1+rpi2).
libaugeas0 is already the newest version (1.11.0-3).
libffi-dev is already the newest version (3.2.1-9).
libssl-dev is already the newest version (1.1.1d-0+deb10u2).
openssl is already the newest version (1.1.1d-0+deb10u2).
python is already the newest version (2.7.16-1).
python-dev is already the newest version (2.7.16-1).
python-virtualenv is already the newest version (15.1.0+ds-2).
virtualenv is already the newest version (15.1.0+ds-2).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Creating virtual environment…
Installing Python packages…
^[[1;2BHad a problem while installing Python packages.
pip prints the following errors:
=====================================================
Collecting ConfigArgParse==0.14.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 12))
Downloading https://files.pythonhosted.org/packages/55/ea/f0ade52790bcd687127a302b26c1663bf2e0f23210d5281dbfcd1dfcda28/ConfigArgParse-0.14.0.tar.gz
Collecting asn1crypto==0.24.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 14))
Downloading https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl (101kB)
Collecting certifi==2019.6.16 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 17))
Downloading https://files.pythonhosted.org/packages/69/1b/b853c7a9d4f6a6d00749e94eb6f3a041e342a885b87340b79c1ef73e3a78/certifi-2019.6.16-py2.py3-none-any.whl (157kB)
Collecting cffi==1.12.3 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 20))
Downloading https://files.pythonhosted.org/packages/93/1a/ab8c62b5838722f29f3daffcc8d4bd61844aa9b5f437341cc890ceee483b/cffi-1.12.3.tar.gz (456kB)
Collecting chardet==3.0.4 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 49))
Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
Collecting configobj==5.0.6 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 52))
Downloading https://files.pythonhosted.org/packages/64/61/079eb60459c44929e684fa7d9e2fdca403f67d64dd9dbac27296be2e0fab/configobj-5.0.6.tar.gz
Collecting cryptography==2.7 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 54))
Downloading https://files.pythonhosted.org/packages/c2/95/f43d02315f4ec074219c6e3124a87eba1d2d12196c2767fadfdc07a83884/cryptography-2.7.tar.gz (495kB)
Collecting distro==1.4.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 71))
Downloading https://files.pythonhosted.org/packages/ea/35/82f79b92fa4d937146c660a6482cee4f3dfa1f97ff3d2a6f3ecba33e712e/distro-1.4.0-py2.py3-none-any.whl
Collecting enum34==1.1.6 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 74))
Downloading https://files.pythonhosted.org/packages/c5/db/e56e6b4bbac7c4a06de1c50de6fe1ef3810018ae11732a50f15f62c7d050/enum34-1.1.6-py2-none-any.whl
Collecting funcsigs==1.0.2 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 79))
Downloading https://files.pythonhosted.org/packages/69/cb/f5be453359271714c01b9bd06126eaf2e368f1fddfff30818754b5ac2328/funcsigs-1.0.2-py2.py3-none-any.whl
Collecting future==0.17.1 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 82))
Downloading https://files.pythonhosted.org/packages/90/52/e20466b85000a181e1e144fd8305caf2cf475e2f9674e797b222f8105f5f/future-0.17.1.tar.gz (829kB)
Collecting idna==2.8 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 84))
Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB)
Collecting ipaddress==1.0.22 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 87))
Downloading https://files.pythonhosted.org/packages/fc/d0/7fc3a811e011d4b388be48a0e381db8d990042df54aa4ef4599a31d39853/ipaddress-1.0.22-py2.py3-none-any.whl
Collecting josepy==1.2.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 90))
Downloading https://files.pythonhosted.org/packages/de/bb/4949857070b6601eacc209478823745cd79d72cf1c0bb8407aebb772677b/josepy-1.2.0-py2.py3-none-any.whl (57kB)
Collecting mock==1.3.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 93))
Downloading https://files.pythonhosted.org/packages/b2/50/664a70b87408bb6c14c1af2337efa64eb8d1af80c933531758b8fb41ec25/mock-1.3.0-py2.py3-none-any.whl (56kB)
Collecting parsedatetime==2.4 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 96))
Downloading https://files.pythonhosted.org/packages/1d/48/ac8d4c6239437592852e951bcb9438dc585f80c29777c391aef69c67dc79/parsedatetime-2.4-py2-none-any.whl (40kB)
Collecting pbr==5.4.2 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 99))
Downloading https://files.pythonhosted.org/packages/f9/d8/bd657bfa0e89eb71ad5e977ed99a9bb2b44e5db68d9190970637c26501bb/pbr-5.4.2-py2.py3-none-any.whl (110kB)
Collecting pyOpenSSL==19.0.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 102))
Downloading https://files.pythonhosted.org/packages/01/c8/ceb170d81bd3941cbeb9940fc6cc2ef2ca4288d0ca8929ea4db5905d904d/pyOpenSSL-19.0.0-py2.py3-none-any.whl (53kB)
Collecting pyRFC3339==1.1 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 105))
Downloading https://files.pythonhosted.org/packages/c1/7a/725f5c16756ec6211b1e7eeac09f469084595513917ea069bc023c40a5e2/pyRFC3339-1.1-py2.py3-none-any.whl
Collecting pycparser==2.19 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 108))
Downloading https://www.piwheels.org/simple/pycparser/pycparser-2.19-py2.py3-none-any.whl (111kB)
Collecting pyparsing==2.4.2 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 110))
Downloading https://files.pythonhosted.org/packages/11/fa/0160cd525c62d7abd076a070ff02b2b94de589f1a9789774f17d7c54058e/pyparsing-2.4.2-py2.py3-none-any.whl (65kB)
Collecting python-augeas==0.5.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 113))
Downloading https://files.pythonhosted.org/packages/41/e6/4b6740cb3e31b82252099994cea751c648b846aa7874343c31d68c2215be/python-augeas-0.5.0.tar.gz (90kB)
Collecting pytz==2019.2 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 115))
Downloading https://files.pythonhosted.org/packages/87/76/46d697698a143e05f77bec5a526bf4e56a0be61d63425b68f4ba553b51f2/pytz-2019.2-py2.py3-none-any.whl (508kB)
Collecting requests==2.21.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 118))
Downloading https://files.pythonhosted.org/packages/7d/e3/20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/requests-2.21.0-py2.py3-none-any.whl (57kB)
Collecting requests-toolbelt==0.9.1 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 121))
Downloading https://files.pythonhosted.org/packages/60/ef/7681134338fc097acef8d9b2f8abe0458e4d87559c689a8c306d0957ece5/requests_toolbelt-0.9.1-py2.py3-none-any.whl (54kB)
Collecting six==1.12.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 124))
Downloading https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Collecting urllib3==1.24.3 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 127))
Downloading https://files.pythonhosted.org/packages/01/11/525b02e4acc0c747de8b6ccdab376331597c569c42ea66ab0a1dbd36eca2/urllib3-1.24.3-py2.py3-none-any.whl (118kB)
Collecting zope.component==4.5 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 130))
Downloading https://files.pythonhosted.org/packages/97/e2/c785df1171f277ea93cc16bdcc112cb3ddfde1aeefbc401d46c49727f472/zope.component-4.5-py2.py3-none-any.whl (70kB)
Collecting zope.deferredimport==4.3.1 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 133))
Downloading https://files.pythonhosted.org/packages/63/e3/05b02057b56cd9c59d848b67aff1cc701e1d2237055ebd0d0c1f44331186/zope.deferredimport-4.3.1-py2.py3-none-any.whl
Collecting zope.deprecation==4.4.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 136))
Downloading https://files.pythonhosted.org/packages/f9/26/b935bbf9d27e898b87d80e7873a0200cebf239253d0afe7a59f82fe90fff/zope.deprecation-4.4.0-py2.py3-none-any.whl
Collecting zope.event==4.4 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 139))
Downloading https://files.pythonhosted.org/packages/c5/96/361edb421a077a4c208b4a5c212737d78ae03ce67fbbcd01621c49f332d1/zope.event-4.4-py2.py3-none-any.whl
Collecting zope.hookable==4.2.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 142))
Downloading https://files.pythonhosted.org/packages/41/b5/378175b959565de41f45c775cdfbf8897aaeaf29a258b94e40bd2661ce46/zope.hookable-4.2.0.tar.gz
Collecting zope.interface==4.6.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 153))
Downloading https://files.pythonhosted.org/packages/4e/d0/c9d16bd5b38de44a20c6dc5d5ed80a49626fafcb3db9f9efdc2a19026db6/zope.interface-4.6.0.tar.gz (150kB)
Collecting zope.proxy==4.3.2 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 183))
Downloading https://files.pythonhosted.org/packages/a3/7b/ada37e2c9ba5ba6b23ef8b0f090fd08fabd06e15450c41dca4799349a2dd/zope.proxy-4.3.2.tar.gz (43kB)
Collecting letsencrypt==0.7.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 203))
Downloading https://files.pythonhosted.org/packages/fd/21/0c6f33829fadec8aca0c1ebb4d6f8101c05899356a58d1b2e506cb77cf18/letsencrypt-0.7.0-py2-none-any.whl
Collecting certbot==0.39.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 207))
Downloading https://files.pythonhosted.org/packages/0c/de/51b3ced72263fc2be0b5e13c216f08b618099e05bcf0f537a772383b1cbe/certbot-0.39.0-py2.py3-none-any.whl (343kB)
Collecting acme==0.39.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 210))
Downloading https://files.pythonhosted.org/packages/83/ea/ce967aab3b50b600675b541e2d1bbd701ec5d863a181104fd0b17b4a33c9/acme-0.39.0-py2.py3-none-any.whl (86kB)
Collecting certbot-apache==0.39.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 213))
Downloading https://files.pythonhosted.org/packages/85/7f/7722f54ba4e4b4c47dda2eb18ff500fff0d8eb9036e19a2f19ecd376686d/certbot_apache-0.39.0-py2.py3-none-any.whl (253kB)
Collecting certbot-nginx==0.39.0 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 216))
Downloading https://files.pythonhosted.org/packages/54/d1/87999757ce3737b53ed286f30b1bc03e3eed06075da0c0989ebae7f60fff/certbot_nginx-0.39.0-py2.py3-none-any.whl (90kB)
Requirement already satisfied: setuptools>=1.0 in /opt/eff.org/certbot/venv/lib/python2.7/site-packages (from josepy==1.2.0->-r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 90))
THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
pycparser==2.19 from https://www.piwheels.org/simple/pycparser/pycparser-2.19-py2.py3-none-any.whl#sha256=bc15573b7c6edd24407526dbbc7a0bd33d80d8af44231c37f58d73f56ff9cab6 (from -r /tmp/tmp.1J9q7qzM4I/letsencrypt-auto-requirements.txt (line 108)):
Expected sha256 a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3
Got bc15573b7c6edd24407526dbbc7a0bd33d80d8af44231c37f58d73f56ff9cab6
=====================================================
Certbot has problem setting up the virtual environment.
We were not be able to guess the right solution from your pip
output.
Consult https://certbot.eff.org/docs/install.html#problems-with-python-virtual-environment
for possible solutions.
You may also find some support resources at https://certbot.eff.org/support/ .
Als 1. habe ich das script mit sudo laufen lassen, die Fehler sehen gleich aus.
Danach war ich auf certbot.eff.orf und habe mir die temporäre Swap eingerichtet.
Das script läuft neu durch und liefert immer noch dieselben Fehlermeldungen.
Wie mache ich jetzt weiter? Einfach ignorieren?
Lösche die Datei /etc/pip.conf und führe den Befehl nochmals aus.
Ich habe mit mv /etc/pip.conf /etc/pip.conf.old dieses Hindernis gemeistert. Danke für den Tip 🙂
Jetzt muss ich nur noch einen freien und kostenlosen DynDNS-Anbieter finden, der mit meiner (ausländischen) Provider-gelieferten-und-total-verkorxten-Nicht-Fritzbox klarkommt…
Hallo Frank, vielen Dank für den Tipp, es hat mit dem löschen der Datei auch bei mir funktioniert.
[…] Let’s encrypt nicht mehr via Github auf dem Raspberry Pi OS, wie im Artikel „Let’s Encrypt auf dem Raspberry Pi“ beschrieben, […]