I would just like to say thank you for bringing browser and email internet security to the world for free. Thank you also to the sponsors that make this possible, and for all of us who use it.
It’s brilliant.
Thank you.
I would just like to say thank you for bringing browser and email internet security to the world for free. Thank you also to the sponsors that make this possible, and for all of us who use it.
It’s brilliant.
Thank you.
A million times this. I don’t think it’s said and heard enough.
We web developers are truly grateful for Let’s Encrypt!
It’s really exciting stuff isn’t it? Encrypted SSL/TLS connections for nothing, for little or no effort, and at no cost. It’s like giving everybody in the world a little bit of space to call their own.
little to no effort? not for my setup. manual setup for 14 SANs isnt funny.
Ouch that does sound painful.
It could be worth you checking out ansible ( https://www.ansible.com/get-started ) to automate that kind of thing. It’s open source too. Yeah!
You’d add all 14 SANs to an inventory list, then run one command using a ‘playbook’ file which has your letsencrypt goodies in it.
If you can SSH into a box using SSH Keys then you can manage a box with ansible. Apparently.
well in short it’s my windows PC with multiple webroots.
so if there would be a client that could handle webroots with multiple domains (or allow DNS “walking up” for DNS Challenges ( just have 3 root domains, so I could do that myself) it would be great.
Why don’t you do something like this on your webserver for each virtual host
Alias /.well-known/acme-challenge /path/to/letsencrypt/.well-known/acme-challenge
and use /path/to/letsencrypt/
as webroot ?
yeah, intresting Idea, already in thought BUT!
there is iirc no LE client for windows yet that doesnt need IIS to work.
for a lot of vhosts this gets annyoing, especially since you have to complete the challenges multiple times, and new vhosts -> new aliases.
while with a one-time set in the DNS which specifies my public key as authorised for all my root domains (3) I would immediately have no ptoblems getting all below it via walk-up.
Not on windows, I actually only have one Alias
in my global apache config. My config is as follow :
root@grenade:/# cat /etc/apache2/conf-enabled/letsenrypt.conf
Alias /.well-known/acme-challenge /home/www-data/vhost/letsencrypt/.well-known/acme-challenge
ProxyPass /.well-known/acme-challenge !
<Directory /home/www-data/vhost/letsencrypt/.well-known/acme-challenge>
require all granted
</Directory>
Indeed, even if I successfully install the letsencrypt client on windows (a windows 7 vm), It fails by using the function geteuid on the os modules only available on unix systems. cf https://community.letsencrypt.org/t/python-virtualenv-on-windows-10-attributeerror-geteuid
C:\>pip install virtualenv
Collecting virtualenv
Downloading virtualenv-14.0.6-py2.py3-none-any.whl (1.8MB)
100% |################################| 1.8MB 217kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-14.0.6
You are using pip version 7.1.2, however version 8.0.2 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' comm
and.
C:\>virtualenv letsencrypt
New python executable in C:\letsencrypt\Scripts\python.exe
Installing setuptools, pip, wheel...done.
C:\>cd letsencrypt
C:\letsencrypt>cd Scripts
C:\letsencrypt\Scripts>activate.bat
(letsencrypt) C:\letsencrypt\Scripts>pip install letsencrypt
Collecting letsencrypt
Downloading letsencrypt-0.4.0-py2-none-any.whl (197kB)
100% |################################| 200kB 660kB/s
Collecting zope.interface (from letsencrypt)
Downloading zope.interface-4.1.3.tar.gz (141kB)
100% |################################| 143kB 1.3MB/s
Requirement already satisfied (use --upgrade to upgrade): setuptools in c:\letse
ncrypt\lib\site-packages (from letsencrypt)
Collecting python2-pythondialog>=3.2.2rc1 (from letsencrypt)
Downloading python2-pythondialog-3.3.0.tar.bz2 (1.8MB)
100% |################################| 1.8MB 217kB/s
Collecting PyOpenSSL (from letsencrypt)
Downloading pyOpenSSL-0.15.1-py2.py3-none-any.whl (102kB)
100% |################################| 106kB 1.3MB/s
Collecting cryptography>=0.7 (from letsencrypt)
Downloading cryptography-1.2.2-cp27-none-win_amd64.whl (1.3MB)
100% |################################| 1.3MB 260kB/s
Collecting ConfigArgParse>=0.9.3 (from letsencrypt)
Downloading ConfigArgParse-0.10.0.tar.gz
Collecting parsedatetime (from letsencrypt)
Downloading parsedatetime-1.5-py2-none-any.whl (50kB)
100% |################################| 53kB 890kB/s
Collecting configobj (from letsencrypt)
Downloading configobj-5.0.6.tar.gz
Collecting pytz (from letsencrypt)
Downloading pytz-2015.7-py2.py3-none-any.whl (476kB)
100% |################################| 479kB 525kB/s
Collecting psutil>=2.1.0 (from letsencrypt)
Downloading psutil-4.0.0-cp27-cp27m-win_amd64.whl (156kB)
100% |################################| 159kB 871kB/s
Collecting six (from letsencrypt)
Downloading six-1.10.0-py2.py3-none-any.whl
Collecting acme==0.4.0 (from letsencrypt)
Downloading acme-0.4.0-py2.py3-none-any.whl (95kB)
100% |################################| 98kB 871kB/s
Collecting zope.component (from letsencrypt)
Downloading zope.component-4.2.2.tar.gz (546kB)
100% |################################| 548kB 660kB/s
Collecting mock (from letsencrypt)
Downloading mock-1.3.0-py2.py3-none-any.whl (56kB)
100% |################################| 57kB 871kB/s
Collecting pyrfc3339 (from letsencrypt)
Downloading pyRFC3339-1.0-py2.py3-none-any.whl
Collecting enum34 (from cryptography>=0.7->letsencrypt)
Downloading enum34-1.1.2.tar.gz (46kB)
100% |################################| 49kB 1.3MB/s
Collecting ipaddress (from cryptography>=0.7->letsencrypt)
Downloading ipaddress-1.0.16-py27-none-any.whl
Collecting pyasn1>=0.1.8 (from cryptography>=0.7->letsencrypt)
Downloading pyasn1-0.1.9-py2.py3-none-any.whl
Collecting idna>=2.0 (from cryptography>=0.7->letsencrypt)
Downloading idna-2.0-py2.py3-none-any.whl (61kB)
100% |################################| 61kB 1.3MB/s
Collecting cffi>=1.4.1 (from cryptography>=0.7->letsencrypt)
Downloading cffi-1.5.2-cp27-none-win_amd64.whl (150kB)
100% |################################| 151kB 871kB/s
Collecting requests (from acme==0.4.0->letsencrypt)
Downloading requests-2.9.1-py2.py3-none-any.whl (501kB)
100% |################################| 503kB 525kB/s
Collecting ndg-httpsclient (from acme==0.4.0->letsencrypt)
Downloading ndg_httpsclient-0.4.0.tar.gz
Collecting werkzeug (from acme==0.4.0->letsencrypt)
Downloading Werkzeug-0.11.4-py2.py3-none-any.whl (305kB)
100% |################################| 307kB 1.3MB/s
Collecting zope.event (from zope.component->letsencrypt)
Downloading zope.event-4.2.0-py2-none-any.whl
Collecting funcsigs (from mock->letsencrypt)
Downloading funcsigs-0.4-py2.py3-none-any.whl
Collecting pbr>=0.11 (from mock->letsencrypt)
Downloading pbr-1.8.1-py2.py3-none-any.whl (89kB)
100% |################################| 90kB 1.3MB/s
Collecting pycparser (from cffi>=1.4.1->cryptography>=0.7->letsencrypt)
Downloading pycparser-2.14.tar.gz (223kB)
100% |################################| 225kB 871kB/s
Building wheels for collected packages: zope.interface, python2-pythondialog, Co
nfigArgParse, configobj, zope.component, enum34, ndg-httpsclient, pycparser
Running setup.py bdist_wheel for zope.interface ... done
Stored in directory: C:\Users\Valentin\AppData\Local\pip\Cache\wheels\c9\15\5b
\3a7e3c7c3b67b5ee002c0ebe8ac1f46ec3c0379c5037c6ab71
Running setup.py bdist_wheel for python2-pythondialog ... done
Stored in directory: C:\Users\Valentin\AppData\Local\pip\Cache\wheels\f0\5f\b6
\531cf000ffa0221f1c1dd4e95004248e664b90e673e5be8741
Running setup.py bdist_wheel for ConfigArgParse ... done
Stored in directory: C:\Users\Valentin\AppData\Local\pip\Cache\wheels\c0\ce\1b
\bb8d37531096afe7a604aab11423df765c232b6d8d2ebaa2de
Running setup.py bdist_wheel for configobj ... done
Stored in directory: C:\Users\Valentin\AppData\Local\pip\Cache\wheels\d0\18\3a
\88a9e8e07940560496c247872870978bf9b6cd5d914c0eac3e
Running setup.py bdist_wheel for zope.component ... done
Stored in directory: C:\Users\Valentin\AppData\Local\pip\Cache\wheels\64\b9\9d
\df8cb192e4b1cb5691fa67c56a841500ac562bd99337d6ef5a
Running setup.py bdist_wheel for enum34 ... done
Stored in directory: C:\Users\Valentin\AppData\Local\pip\Cache\wheels\1a\4e\a5
\bc564dd03d9abe991425c88d88aa8c5c99ad9a733551b69b4e
Running setup.py bdist_wheel for ndg-httpsclient ... done
Stored in directory: C:\Users\Valentin\AppData\Local\pip\Cache\wheels\30\85\40
\a29750f9287fe119a10708580a73cfb16f51e5f9a820430a2d
Running setup.py bdist_wheel for pycparser ... done
Stored in directory: C:\Users\Valentin\AppData\Local\pip\Cache\wheels\c7\28\31
\bac6d0b118c0bdcbf57f9219afdf2e624379c07efa6c769dbc
Successfully built zope.interface python2-pythondialog ConfigArgParse configobj
zope.component enum34 ndg-httpsclient pycparser
Installing collected packages: zope.interface, python2-pythondialog, six, enum34
, ipaddress, pyasn1, idna, pycparser, cffi, cryptography, PyOpenSSL, ConfigArgPa
rse, parsedatetime, configobj, pytz, psutil, requests, ndg-httpsclient, werkzeug
, funcsigs, pbr, mock, pyrfc3339, acme, zope.event, zope.component, letsencrypt
Successfully installed ConfigArgParse-0.10.0 PyOpenSSL-0.15.1 acme-0.4.0 cffi-1.
5.2 configobj-5.0.6 cryptography-1.2.2 enum34-1.1.2 funcsigs-0.4 idna-2.0 ipaddr
ess-1.0.16 letsencrypt-0.4.0 mock-1.3.0 ndg-httpsclient-0.4.0 parsedatetime-1.5
pbr-1.8.1 psutil-4.0.0 pyasn1-0.1.9 pycparser-2.14 pyrfc3339-1.0 python2-pythond
ialog-3.3.0 pytz-2015.7 requests-2.9.1 six-1.10.0 werkzeug-0.11.4 zope.component
-4.2.2 zope.event-4.2.0 zope.interface-4.1.3
(letsencrypt) C:\letsencrypt\Scripts>letsencrypt.exe --help
letsencrypt [SUBCOMMAND] [options] [-d domain] [-d domain] ...
The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates. By
default, it will attempt to use a webserver both for obtaining and installing
the cert. Major SUBCOMMANDS are:
(default) run Obtain & install a cert in your current webserver
certonly Obtain cert, but do not install it (aka "auth")
install Install a previously obtained cert in a server
renew Renew previously obtained certs that are near expiry
revoke Revoke a previously obtained certificate
rollback Rollback server configuration changes made during install
config_changes Show changes made to server config during installation
plugins Display information about installed plugins
Choice of server plugins for obtaining and installing cert:
(the apache plugin is not installed)
--standalone Run a standalone webserver for authentication
(nginx support is experimental, buggy, and not installed by default)
--webroot Place files in a server's webroot folder for authentication
OR use different plugins to obtain (authenticate) the cert and then install it:
--authenticator standalone --installer apache
More detailed help:
-h, --help [topic] print this message, or detailed help on a topic;
the available topics are:
all, automation, paths, security, testing, or any of the subcommands or
plugins (certonly, install, nginx, apache, standalone, webroot, etc)
(letsencrypt) C:\letsencrypt\Scripts>
even a global alias doesnt actually help since I still have to use manual mode on my raspi and copy all the annoying stuff over.
You could also directly proxy /.well-known/acme-challenge to your rpi.
ProxyPass /.well-known/acme-challenge http://addresse.of.the.rpi/.well-known/acme-challenge
well the pi doesnt even run a webserver or anything I just used it as tool for trying LE.
It should work with the standalone
plugin when issuing certs and raise an error 500 the rest of the time.
But hey, it seems more and more to me you WANT to do it manually.
nothing says thank you as a beer/coffee to the makers : https://letsencrypt.org/become-a-sponsor/