我如何使用Let's Encrypt(letsencrypt.org)作为免费的SSL证书提供者?

我有几个网站运行一个StartSSL免费证书( CJSHayward.com , JobhuntTracker.com ),Firefox拒绝StartSSL,并显示一个错误页面,说我的服务器没有正确configuration(IIRC),因为证书链。 我寻求帮助,并确认我的VirtualHost(可应要求提供)用于证书链,并且正确安装了中间证书。 显示的网站没有错误,我知道在Chrome,Safari,Edge或Opera中。

经过一番search, 让我们encryption! 看起来像一个有吸引力的产品,不久之前,我有(AFAICT)一个私人密钥和/ etc / apache2 / sites-enabled下的每个域的证书,当然减去任何域不再是我的。 我想我会做一个试运行,并build立一个HTTPS连接到现在只能在HTTP: JSH.name下的站点。 我提出了“让我们encryption!” 证书和私钥到我的SSL目录并添加:

<VirtualHost *:443> ServerAdmin [email protected] DocumentRoot /home/jonathan/stornge SSLEngine On SSLCertificateFile /etc/apache2/ssl/0000_csr-letsencrypt.pem SSLCertificateKeyFile /etc/apache2/ssl/0000_key-letsencrypt.pem ServerName jsh.name ServerAlias www.jsh.name LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined CustomLog /home/jonathan/logs/stornge.com combined <Directory /home/jonathan/stornge/> Options ExecCGI Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost> 

然后,我重新启动以查看我的工作,并且我所做的每个HTTP或HTTPS请求都被挂起。 这包括使用我的StartSSL证书的HTTPS上的两个域,以及通过HTTP和HTTPS访问的HTTPS上新近可用的域。 我评论了VirtualHost并反弹了Apache,所有旧的function又恢复正常。

我用过“encryption”吗? 是否正确? 我有些怀疑,因为现有的SSLconfiguration具有扩展名为.key的私钥,.crt的证书扩展名以及扩展名为.pem的证书链文件。

我检查SSL目录后,再次尝试,发现0000_csr.letsencrypt.pem是模式644; 我把那个目录中的所有文件都改成了600模式。当我刚才尝试时,我重复了以前的行为:网站挂起所有的请求,另外, apachectl restart得到一个声明(我忘记了确切的措辞)httpd没有运行,计算机正试图启动它。

我如何获得免工作证“Let's Encrypt”或其他一些没有疏远Firefox的工具?

apachectl -v给出:

 Server version: Apache/2.4.10 (Debian) Server built: Nov 28 2015 14:05:48 

一个uname -a给出:

 Linux www 4.4.0-x86_64-linode63 #2 SMP Tue Jan 19 12:43:53 EST 2016 x86_64 GNU/Linux 

–UPDATE–

删除的内容,0000_key-letsencrypt.pem以下列方式为界限:

-----BEGIN PRIVATE KEY----- -----END PRIVATE KEY-----

在目录heirarchy上find一个产量:

  root @ www:/ etc / letsencrypt#find`pwd` -print
在/ etc / letsencrypt
的/ etc / letsencrypt /键
 /etc/letsencrypt/keys/0000_key-letsencrypt.pem
在/ etc / letsencrypt /账户
 /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org
 /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory
 /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3
 /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/private_key.json
 /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/meta.json
 /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/regr.json
在/ etc / letsencrypt /更新
 /etc/letsencrypt/options-ssl-apache.conf
的/ etc / letsencrypt / CSR
 /etc/letsencrypt/csr/0000_csr-letsencrypt.pem 

目录/ home / jonathan / stornge及其内容是世界可读和世界可执行文件,这将有所作为。

–UPDATE–

在这里添加一些实质性内容

http://OrthodoxChurchFathers.com Apache conf文件有两个VirtualHosts,一个用来提供http://OrthodoxChurchFathers.com ,另一个用来将http://www.OrthodoxChurchFathers.com请求redirect到http://OrthodoxChurchFathers.com 。 包含VirtualHosts的.conf文件是:

 <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName orthodoxchurchfathers.com #ServerAlias www.orthodoxchurchfathers.com fathers.jonathanscorner.com 

<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName orthodoxchurchfathers.com #ServerAlias www.orthodoxchurchfathers.com fathers.jonathanscorner.com

 DocumentRoot /home/cjsh/fathers/document_root &lt;Directory /> Options FollowSymLinks AllowOverride None &lt;/Directory> &lt;Directory /home/cjsh/fathers> Options ExecCGI FollowSymLinks Indexes MultiViews AllowOverride None Order allow,deny allow from all &lt;/Directory> DirectoryIndex index.cgi index.html ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /doc/ "/usr/share/doc/" &lt;Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 &lt;/Directory> 

</虚拟主机>

 &lt;VirtualHost *:80> ServerAdmin [email protected] ServerName www.orthodoxchurchfathers.com ServerAlias fathers.jonathanscorner.com DocumentRoot /home/cjsh/oldmirror RewriteEngine On RewriteRule ^(.*)$ http://orthodoxchurchfathers.com$1 [R=301,L] &lt;/VirtualHost></pre></code> 

当我尝试运行它并单独请求orthodoxchurchfathers.com时,我得到:

┌───────────────────────────────────────────────── ─────────────────────┐
│我们无法find服务器名称或地址│的虚拟主机
│orthodoxchurchfathers.com。 │
│您想select哪个虚拟主机? │
│(注意:具有多个虚拟主机的conf文件尚不支持)│
│┌─────────────────────────────────────────────────────────────────────────────────────────────────── ──────────────────┐│
││1008-stornge.conf | 多个名字| ││
││2014-paraskeva.conf | paraskeva.jonathansco | ││
││3036-unixytalk.conf | unixtalk.jsh.name | ││
││4038-proxy.conf | 多个名字| ││
││5027-anna.conf | 多个名字| ││
││6044-jobhunt-tracker.creation.c | 多个名字| ││
││7049-jsh.conf | 多个名字| ││
││8001-steampunk.conf | | ││
││9006-blajeny.conf | 多个名字| ││
││10032-videos.conf | 多个名字| d││
│└────↓(+)───────────────────────────────────────── ──────────30%─────┘│
├───────────────────────────────────────────────── ─────────────────────┤
││
└───────────────────────────────────────────────── ─────────────────────┘

我使用的命令是./letsencrypt-auto –debug certonly。

我已经写了一对在CentOS上运行Let's Encrypt SSL证书的方法: 初始化安装 过程 。

而我的每个域(我使用z-<[sub-]domain-tld>.conf的文件命名约定)Apacheconfiguration文件看起来像这样:

 <VirtualHost *:80> ServerName domain.tld Redirect permanent / https://domain.tld/ </VirtualHost> <VirtualHost *:443> SSLCertificateFile /etc/letsencrypt/live/domain.tld/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/domain.tld/fullchain.pem DocumentRoot /var/www/domain ServerName domain.tld ErrorLog logs/domain-error_log CustomLog logs/domain-access_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" ServerAdmin [email protected] SSLEngine on <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 <Directory "/var/www/domain"> Options All +Indexes +FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> 

而我的ssl.conf如下所示:

 #SSL options for all sites Listen 443 SSLPassPhraseDialog builtin SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) SSLSessionCacheTimeout 300 Mutex sysvsem default SSLRandomSeed startup file:/dev/urandom 1024 SSLRandomSeed connect builtin SSLCryptoDevice builtin SSLCompression off SSLHonorCipherOrder on SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 

使用让我们encryption来获得SSL证书(并让您的网站达到SSL实验室的“A”等级)是非常直接的 – 一旦你通过Apacheconfiguration和LE命令行参数的一些神秘。

我发现ACME客户端运行良好,设置和启动简单,定期更新,易于更新,在亚马逊Linux上运行良好。 我已经写了一个教程,你可以在这里find。

开始下载ACME并设置它

 https://github.com/hlandau/acme.git cp ./acmetool /usr/local/bin /usr/local/bin/acmetool quickstart 

申请一个证书

 ./acmetool want example.com www.example.com 

这就是我如何设置挑战的目录 – 这是Let's Encrypt连接到您的服务器进行validation的地方

 mkdir -p /var/www/acme-challenge/.well-known/acme-challenge chmod -R user:www-data /var/www/acme-challenge/* find /var/www/acme-challenge/ -type d -exec chmod 755 {} \; vi /var/www/acme-challenge/.well-known/acme-challenge/text.html (add "hello world!" or similar) 

上面的链接网站上有更多的细节和评论,作者和社区是有帮助的。

我在Web根模式下使用EFF的Certbot取得了很好的成功(因为自动化进程停止Web服务器的想法,即使只是简单地在证书更新期间也会吓到我)。

首先,安装Certbot。 如果你在Debian Jessie(这是我写这篇文章的时候),首先添加jessie-backports存储库,然后

 $ sudo apt-get install python-certbot-apache -t jessie-backports 

这将带来一些包加certbot本身。

然后,在webroot模式下创build一个证书,运行类似的东西

 $ sudo certbot certonly --webroot -w /srv/www/www.example.net/htdocs -d www.example.net 

如果您想要使用默认模式(当前为2048位)以外的模数,您可以select添加--register-unsafely-without-email以及--rsa-key-size X -d fqdn.example.com可以重复任意次数,如同-w ; 每个-w启动一个新的域名服务目录,由-d命名。 让我们encryption不会发出通配符证书(这是在他们的常见问题中提到),显然,也没有Punycode域名的证书。

certbot作为需求运行的用户,至less在缺省情况下,可以将访问权限写入/etc/letsencrypt多个位置。 以root身份运行它可能是最简单的。 它将在给定的web根目录( -w )下的.well-known/acme-challenge下创build一个文件,让远程系统validation它是否可以 通过HTTP在指定的域名上访问 ,如果一切都检出会创build一堆/etc/letsencrypt/archive/www.example.net的PEM文件加上/etc/letsencrypt/archive/www.example.net相应的一组符号链接,并打印一个友好的成功消息。

如果所有内容都检查完毕, /etc/letsencrypt/live要做的事情是将您的Web服务器设置为使用/etc/letsencrypt/live的主机名子目录中find的证书作为HTTPS。 对于Apache来说,绝对的最低限度是类似于:

 <VirtualHost *:443> ServerName www.example.net SSLEngine on SSLCertificateKeyFile /etc/letsencrypt/live/www.example.net/privkey.pem SSLCertificateFile /etc/letsencrypt/live/www.example.net/cert.pem SSLCertificateChainFile /etc/letsencrypt/live/www.example.net/chain.pem </VirtualHost> 

根据需要添加任何其他指令,使用apache2ctl -Sapache2ctl configtestvalidation是否所有内容都检出,然后使用apache2ctl graceful激活HTTPS虚拟主机。

不要忘记定期更新证书; 目前,我们的encryption证书在90天后过期。 Debian软件包在/etc/cron.d/certbot提供了一个cron作业,在/lib/systemd/system/certbot.service中提供了一个systemd服务来处理这个问题,或者你可以手动运行certbot renew 。 记得要apache2ctl graceful开始使用新颁发的证书; 您可能需要调整cron作业或systemd服务来自动执行此操作。 要在Debian Jessie中自动加载更新的证书到Apache,请考虑更新/lib/systemd/system/certbot.service以添加到[Service]部分(注意:该命令很重要):

 ExecStartPost=/usr/sbin/apache2ctl configtest ExecStartPost=/usr/sbin/apache2ctl graceful 

如果 Apacheconfiguration文件传递了configtest ,这样做会自动加载更新的证书,并且如果configtestgraceful失败,则将Certbot列为失败单元。