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

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

我有几个网站使用 StartSSL 免费证书 (CJSHayward.comJobhuntTracker.com),Firefox 拒绝 StartSSL 并显示错误页面,指出我的服务器配置不正确(如果我没记错的话),原因是证书链。我寻求帮助,并确认我的 VirtualHost(可应要求提供)适用于证书链,并且我已正确安装中间证书。据我所知,网站在 Chrome、Safari、Edge 或 Opera 中显示时没有错误。

经过一番搜索,让我们加密!看起来是个很有吸引力的产品,不久之后,我就在 /etc/apache2/sites-enabled 下为每个域名(当然,不包括不再属于我的域名)都获得了私钥和证书。我想试运行一下,并与现在只能在 HTTP 下使用的站点建立 HTTPS 连接:JSH.名称我将“Let's Encrypt!”证书和私钥移至我的 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,所有旧功能都恢复了正常运行。

我是否正确使用了 Let's “Encrypt!”?我有点怀疑,因为现有的 SSL 配置具有扩展名为 .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

Auname -a给出:

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

- 更新 -

内容已删除,0000_key-letsencrypt.pem 受以下限制:

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

对目录层次结构的查找得出:

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 及其内容是全世界可读的,也是全世界可执行的,这一点会有所不同。

- 更新 -

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

http://OrthodoxChurchFathers.comApache conf 文件有两个 VirtualHosts,一个用于提供服务http://OrthodoxChurchFathers.com和一个重定向http://www.OrthodoxChurchFathers.com请求http://OrthodoxChurchFathers.com。两个 VirtualHost 的 .conf 文件如下:

<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>

</VirtualHost>

&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>

When I try to run it and request orthodoxchurchfathers.com alone, I get:

┌──────────────────────────────────────────────────────────────────────┐ │ We were unable to find a vhost with a ServerName or Address of │ │ orthodoxchurchfathers.com. │ │ Which virtual host would you like to choose? │ │ (note: conf files with multiple vhosts are not yet supported) │ │ ┌──────────────────────────────────────────────────────────────────┐ │ │ │1 008-stornge.conf | Multiple Names | │ │ │ │2 014-paraskeva.conf | paraskeva.jonathansco | │ │ │ │3 036-unixytalk.conf | unixtalk.jsh.name | │ │ │ │4 038-proxy.conf | Multiple Names | │ │ │ │5 027-anna.conf | Multiple Names | │ │ │ │6 044-jobhunt-tracker.creation.c | Multiple Names | │ │ │ │7 049-jsh.conf | Multiple Names | │ │ │ │8 001-steampunk.conf | | │ │ │ │9 006-blajeny.conf | Multiple Names | │ │ │ │10 032-videos.conf | Multiple Names | d│ │ │ └────↓(+)──────────────────────────────────────────────────30%─────┘ │ ├──────────────────────────────────────────────────────────────────────┤ │ │ └──────────────────────────────────────────────────────────────────────┘

The command I used was with ./letsencrypt-auto --debug certonly

答案1

我编写了两个关于在 CentOS 上运行 Let's Encrypt SSL 证书的操作指南:初始设置&记录它

我的每个域(我使用文件命名约定z-<[sub-]domain-tld>.conf)的 Apache 配置文件如下所示:

<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

使用 Let's Encrypt 获取 SSL 证书(并使您的网站获得“A”评级SSL 实验室) 非常简单 - 一旦您了解了 Apache 配置和 LE 命令行参数的一些秘密。

答案2

我找到客户了尖端运行良好,设置和启动都很简单,定期更新,易于更新,在 Amazon Linux 上运行良好。我写了一个教程,你可以找到这里

首先下载 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 连接到你的服务器进行验证的地方

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)

上面链接的网站上有更多详细信息和评论,作者和社区也很有帮助。

答案3

我使用 EFF 取得了很好的效果Certbot在 Web 根模式下(因为在证书更新期间,自动化流程会停止 Web 服务器,即使只是短暂地停止,这种想法让我感到害怕)。

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

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

这将带来一些软件包以及 certbot 本身。

然后,在中创建证书网页根目录模式,运行类似

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

如果您想要除默认值(当前为 2048 位)之外的模数大小,则可以选择添加--register-unsafely-without-email以及。可以重复任意次数,也可以;每个都启动从目录中提供的一组新域,这些域由 命名。 Let's Encrypt 不颁发通配符证书(这在其常见问题解答中提到),显然也不颁发 Punycode 域名证书。--rsa-key-size X-d fqdn.example.com-w-w-d

运行的用户certbot至少需要默认对 下的多个位置具有写入权限/etc/letsencrypt。最简单的方法可能是以 root 身份运行它。它将在.well-known/acme-challenge给定的 Web 根目录 ( -w) 下创建一个文件,让远程系统验证其是否可访问通过指定的域名通过 HTTP,如果一切检查无误,将会在 中创建一堆 PEM 文件/etc/letsencrypt/archive/www.example.net以及一组相应的符号链接,/etc/letsencrypt/live/www.example.net并打印一条友好的成功消息。

如果一切顺利,剩下要做的就是设置您的 Web 服务器,以使用在主机名子目录中找到的证书/etc/letsencrypt/live为相关域提供 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 -S和验证apache2ctl configtest一切是否检查完毕,然后使用激活 HTTPS 虚拟主机apache2ctl graceful

不要忘记定期更新证书;目前,Let's Encrypt 证书在 90 天后过期。Debian 软件包附带一个 cron 作业/etc/cron.d/certbot和一个 systemd 服务来/lib/systemd/system/certbot.service处理此问题,或者您可以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

这样做将自动加载更新的证书如果Apache 配置文件通过,并且如果或失败,configtest则将 Certbot 列为失败单元。configtestgraceful

相关内容