本教程将引导您通过我们的加密认证来首次配置SSL网站。 让我们加密是一个新的SSL授权机构,提供免费的SSL证书。 我们将使用两个现有教程(“ 如何使用我们的加密证书设置中间兼容SSL网站 ”和“ 完美服务器 - Ubuntu 15.10(Wily Werewolf)”,其中包含Apache,PHP,MySQL,PureFTPD,BIND,Postfix,Dovecot和ISPConfig 3 “)。
这里描述的设置与任何Ubuntu LAMP服务器兼容,因此您可以使用这一个作为基础设置。
本教程将向您展示如何在不使用ISPConfig 3的服务器上进行加密,因为即将在下一个ISPConfig 3版本(3.1版)中直接实现Let's Encrypt服务。 因此,如果您打算使用ISPConfig,请等待3.1版本和新教程。
创建网站
第一步是创建网站配置和目录并启用SSL(Apache mod_ssl)。 如果您对服务器上的一个网站使用默认配置,或者计划使用多个vhost来托管多个域,则由您决定。 为了更可靠和可扩展的使用,我将为Azure的“实验室”域isp1.cloudapp.net创建一个vhost配置。
默认情况下,所有vhosts都存储在/ etc / apache2 / sites-available目录中。 运行以下命令检索现有虚拟机配置文件的列表。
ls -l /etc/apache2/sites-available/
我的输出如下所示:
root@isp1:/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
我们现在可以使用“默认”配置文件进行克隆和编辑,也可以使用我们自己的配置。 我喜欢使用我自己的配置,因为我这样做了很多年,所以让我们通过创建一个新的vhost创建文件:
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 combinedScriptAlias /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
</VirtualHost>
<VirtualHost *:443>
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
现在我们必须生成证书文件。
安装我们加密并生成您的第一个SSL证书
我更喜欢使用根登录进行管理,而不是在每个命令之前运行sudo,所以让我们su到root用户:
sudo su
浏览到您的根目录:
cd ~root
安装git以获取我们加密git仓库文件:
apt-get install git
现在克隆让我们加密git仓库:
git clone https://github.com/letsencrypt/letsencrypt.git letsencrypt
导航到您的新的letencrypt文件夹:
cd letsencrypt
并请求您的SSL证书:
./letsencrypt-auto certonly --webroot -w /home/web/isp1.cloudapp.net/public_html -d isp1.cloudapp.net
如果您要求主域(第1级域名为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)来加密。
让我们加密会自动更新所有依赖关系,并引导您完成设置。 所有您需要做的是等待提示窗口询问您的电子邮件地址。 该地址仅用于恢复丢失的数据。
您的新密钥现在存储在/ 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访问您的网站。 让我们加密将通过向您发送安装“Let's Encrypt”中提供的地址的电子邮件,自动通知您有关到期证书。