在 Ubuntu 上开始使用 Lets Encrypt SSL 证书
在此页
- 创建网站
- 安装 Lets Encrypt 并生成您的第一个 SSL 证书
本教程将指导您完成使用 Lets Encrypt 认证的 SSL 网站的首次配置。 Lets Encrypt 是一个新的 SSL 机构,提供免费的 SSL 证书。我们将使用两个现有的教程(\“完美服务器 - Ubuntu 15.10 (Wily Werewolf) 与 Apache、PHP、MySQL、PureFTPD、BIND、Postfix、Dovecot 和 ISPConfig 3”)。
此处描述的设置与任何 Ubuntu LAMP 服务器兼容,因此您也可以将其用作基础设置。
本教程将向您展示如何在没有 ISPConfig 3 的服务器上设置 Lets Encrypt,因为将在下一个 ISPConfig 3 版本(3.1 版)中直接实现 Lets Encrypt 服务。因此,如果您打算使用 ISPConfig,请等待 3.1 版本和新教程。
创建网站
第一步st 是创建网站配置和目录并为其启用 SSL (Apache mod_ssl)。如果您对服务器上的一个网站使用默认配置,或者您计划使用多个虚拟主机来托管多个域,则由您决定。为了更可靠和可扩展地使用,我将从 Azure 为我的“实验室”域 isp1.cloudapp.net 创建虚拟主机配置。
在 Ubuntu 和 Debian 上,所有虚拟主机默认存储在 /etc/apache2/sites-available 目录中。运行以下命令以检索现有虚拟主机配置文件的列表。
ls -l /etc/apache2/sites-available/
我的输出如下所示:
:/home/falco# ls -l /etc/apache2/sites-available/
-rw-r--r-- 1 root root 1332 May 20 2015 000-default.conf
-rw-r--r-- 1 root root 6437 May 20 2015 default-ssl.conf
我们现在可以使用“默认”配置文件来克隆和编辑它,或者我们可以使用我们自己的配置。我更喜欢使用自己的配置,因为我多年来一直这样做,所以让我们通过创建文件来创建一个新的虚拟主机:
vi /etc/apache2/sites-available/isp1.cloudapp.net.conf
在此文件粘贴中,包含以下内容:
<VirtualHost *:80>
ServerName isp1.cloudapp.net
ServerAlias www.isp1.cloudapp.net
DocumentRoot /home/web/isp1.cloudapp.net/public_html
ErrorLog /home/web/isp1.cloudapp.net/log/habdak.eu_error_log
CustomLog /home/web/isp1.cloudapp.net/log/habdak.eu_access_log combined
ScriptAlias /cgi-bin/ /home/web/isp1.cloudapp.net/cgi-bin/
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory /home/web/isp1.cloudapp.net/public_html >
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
AddType application/x-httpd-php .php
AddType application/json .json
</Directory>
<Directory /home/web/isp1.cloudapp.net/cgi-bin >
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
</Directory>
RemoveHandler .php
RemoveHandler .php5
php_admin_value engine Off
IPCCommTimeout 301
FcgidMaxRequestLen 1073741824
php_value memory_limit 128M
php_value suhosin.session.encrypt Off
SSLEngine on
SSLCertificateFile /home/web/isp1.cloudapp.net /ssl.cert
SSLCertificateKeyFile /home/web/isp1.cloudapp.net /ssl.key
SSLCACertificateFile /home/web/isp1.cloudapp.net /ssl.ca
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLProtocol All -SSLv2 -SSLv3
SSLCompression off
SSLHonorCipherOrder On
</VirtualHost>
将出现的域名替换为您的域并保存文件。要激活配置,请运行:
a2ensite isp1.cloudapp.net.conf
现在重新创建网站的文件夹:
mkdir /home/web
mkdir /home/web/isp1.cloudapp.net
mkdir /home/web/isp1.cloudapp.net/public_html
mkdir /home/web/isp1.cloudapp.net/cgi-bin
mkdir /home/web/isp1.cloudapp.net/logs
重新启动 apache 以应用新配置:
sudo service apache2 restart
现在我们必须生成证书文件。
安装 Lets Encrypt 并生成您的第一个 SSL 证书
我更喜欢使用 root 登录进行管理,而不是在每个命令之前运行 sudo,所以让我们 su 到 root 用户:
sudo su
导航到您的根主目录:
cd ~root
安装 git 以获取 Lets Encrypt git 存储库文件:
apt-get install git
现在克隆 Lets Encrypt git 存储库:
git clone https://github.com/letsencrypt/letsencrypt.git letsencrypt
导航到新的 letsencrypt 文件夹:
cd letsencrypt
并请求您的 SSL 证书:
./letsencrypt-auto certonly --webroot -w /home/web/isp1.cloudapp.net/public_html -d isp1.cloudapp.net
如果您请求主域(1st 级别域又名 cloudapp.net)的证书,请使用 -d 参数两次。有和没有这样的 www 前缀:
./letsencrypt-auto certonly --webroot -w /home/web/cloudapp.net/public_html -d cloudapp.net -d www.cloudapp.net
如果您不这样做,证书将对使用 www 前缀打开您的网站的访问者无效。
您还可以将其他子域添加到一个证书。例如,如果您的子域 admin.cloudapp.net 匹配同一站点(服务器上的同一文件夹),您也应该将其添加到此证书中。遗憾的是,您不能将 (*.cloudapp.net) 之类的通配符与 lets encrypt 一起使用。
Lets Encrypt 将自动更新所有依赖项并指导您完成其设置。您需要做的就是等待提示窗口询问您的电子邮件地址。该地址仅用于恢复丢失的数据。
您的新密钥现在默认存储在 /etc/letsencrypt/ 中。我们将把它们链接到我们的网站目录,以便我们以后可以管理密钥。
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/cert1.pem /home/web/isp1.cloudapp.net/ssl.cert
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/chain1.pem /home/web/isp1.cloudapp.net/ssl.ca
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/privkey1.pem /home/web/isp1.cloudapp.net/ssl.key
现在您应该可以使用 SSL 访问您的网站了。 Lets Encrypt 将通过向您发送一封电子邮件到您在 Lets Encrypt 安装过程中提供的地址,自动及时通知您证书过期。