我有一些使用 StartSSL 免费证书(CJSHayward.com、JobhuntTracker.com)运行的站点,Firefox 拒绝 StartSSL 并显示一个错误页面,指出我的服务器配置不正确(IIRC),因为证书链。我寻求帮助并确认我的 VirtualHost(可应要求提供)用于证书链,并且我已正确安装了中间证书。这些网站在 Chrome、Safari、Edge 或 Opera 中显示时没有出现我所知道的错误。
经过一番搜索,让我们加密吧!看起来很有吸引力,不久之后,我就拥有了(AFAICT)一个私钥和一个用于 /etc/apache2/sites-enabled 下的每个域的证书,当然减去任何不再属于我的域。我想我会进行试运行,并与现在仅在 HTTP: JSH.name下可用的站点建立 HTTPS 连接。我移动了“让我们加密!” 证书和私钥到我的 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,所有旧功能又恢复了正常工作。
我用过让我们“加密!”吗?正确吗?我有点怀疑,因为现有的 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/keys /etc/letsencrypt/keys/0000_key-letsencrypt.pem /etc/letsencrypt/accounts /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.com Apache conf 文件有两个 VirtualHost,一个用于提供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
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/cjsh/fathers>
Options ExecCGI FollowSymLinks Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all
</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/"
<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
</Directory>
</VirtualHost>
<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]
</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
.
我已经编写了一对在 CentOS 上运行 Let's Encrypt SSL 证书的操作指南:初始设置和cronning 它。
我的每个域(我使用 的文件命名约定
z-<[sub-]domain-tld>.conf
)Apache 配置文件如下所示:我的 ssl.conf 看起来像这样:
使用 Let's Encrypt 获得 SSL 证书(并使您的网站获得SSL Labs的“A”评级)非常简单 - 一旦您通过了 Apache 配置和 LE 命令行参数的一些奥秘。
我在 web 根模式下使用 EFF 的Certbot取得了很好的成功(因为在证书更新期间自动进程停止 web 服务器的想法,即使只是短暂的,让我感到害怕)。
首先,安装 Certbot。如果您使用的是 Debian Jessie(在我写这篇文章时它是最新的),首先添加
jessie-backports
存储库,然后这将引入一些软件包以及 certbot 本身。
然后,要在webroot模式下创建证书,运行类似
您可以选择添加
--register-unsafely-without-email
以及--rsa-key-size X
是否需要默认值(当前为 2048 位)以外的模数大小。-d fqdn.example.com
可以重复任意次数,就像可以一样-w
;每个都-w
启动一组从目录提供的新域,域命名为-d
. Let's Encrypt 不颁发通配符证书(这在他们的常见问题解答中提到),显然,也不是 Punycode 域名的证书。根据需要运行的用户,
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 的绝对最低要求类似于:根据需要添加任何其他指令,验证使用
apache2ctl -S
并apache2ctl configtest
检查所有内容,并使用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]
部分(注意:顺序很重要):如果Apache 配置文件通过,这样做将自动加载更新的证书,如果或失败
configtest
,则将 Certbot 列为失败单元。configtest
graceful
我发现客户端ACME运行良好,易于设置和使用,定期更新且易于更新,并且在 Amazon Linux 上运行良好。我已经写了一个教程,你可以在这里找到。
通过下载 ACME 并进行设置开始
申请证书
这就是我为挑战设置目录的方式 - 这是 Let's Encrypt 连接到您的服务器以进行验证的地方
上面链接的网站上有更多的细节和评论,作者和社区很有帮助。