如何在 VPS 上设置 Apache 并使用免费签名的 SSL 证书
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
注意:您可能希望考虑使用 Let’s Encrypt 而不是下面的 StartSSL.com 过程。Let’s Encrypt 是一个新的证书颁发机构,提供了一种免费和简单的方式来创建在大多数 Web 浏览器中受信任的 SSL/TLS 证书。查看教程以开始:如何在 Ubuntu 14.04 上使用 Let’s Encrypt 安全 Apache
先决条件
在开始之前,以下是本教程所需的 Web 工具:
<ol>
<li><a href="https://www.google.com/intl/en/chrome/browser">Google Chrome</a> 浏览器</li>
<li>已在您的 VPS(云服务器)上安装了 Apache</li>
<li>您拥有的域名</li>
<li>可以访问该域名的电子邮件地址,可以是以下之一:
<ol>
<li>postmaster@duable.co</li>
<li>hostmaster@duable.co</li>
<li>webmaster@duable.co</li>
</ol>
</li>
</ol>
StartSSL.com 提供完全免费的已验证(您的用户将不再看到那些可怕的红色屏幕,显示“此站点不受信任”)SSL 证书,您可以在您的网站上使用。这是一个很好的交易,因为大多数公司收取类似服务的 $50 到 $60。免费版本有点难以设置,但非常值得。
<p要开始,请浏览到 StartSSL.com 并使用左侧的工具栏导航到 StartSSL 产品,然后到 StartSSL™ Free。选择页面顶部的 控制面板 链接。
确保您正在使用 Google Chrome
<ol>
<li>选择 <strong>快速注册</strong> 选项</li>
<li>输入您的个人信息,然后单击继续。</li>
<li>您将很快收到一封带有验证代码的电子邮件。将该电子邮件复制并粘贴到 StartSSL 网站上的表单中。</li>
<li>他们将审核您的证书请求,然后发送一封带有新信息的电子邮件。这个过程可能需要长达 6 小时,所以请耐心等待。</li>
<li>一旦收到邮件,使用提供的链接和新的验证代码(在邮件底部)继续下一步。</li>
<li>他们将要求您生成一个私钥,并提供“高”或“中”级别的选择。继续选择“高”。</li>
<li>一旦您的密钥准备就绪,点击安装。</li>
<li>Chrome 将显示一个下拉菜单,指出证书已成功安装到 Chrome。</li>
</ol>
<p这意味着您的浏览器现在已经使用您的新证书进行了身份验证,您可以使用您的新证书登录 StartSSL 认证区域。现在,我们需要为您的 VPS 设置一个格式正确的证书以供使用。再次点击 <a href="https://www.startssl.com/?app=12">控制面板</a> 链接,并选择认证选项。Chrome 将显示一个弹出窗口询问您是否要进行身份验证,并显示您刚刚安装的证书。继续使用该证书进行身份验证以进入控制面板。</p>
<p您需要验证您的域名以证明您拥有要设置证书的域名。转到 <a href="https://www.startssl.com/?app=12">控制面板</a> 中的验证向导,并将类型设置为域名验证。您将被提示从您域名的电子邮件中选择一个,例如 postmaster@yourdomain.com。</p>
<p检查您选择的电子邮件地址的收件箱。您将在该地址收到另一封验证电子邮件,因此像之前一样,将验证代码复制并粘贴到 StartSSL 网站中。
<p接下来,转到证书向导选项卡,并选择创建 Web 服务器 SSL/TLS 证书。
<p点击继续,然后输入一个安全密码,将其他设置保持不变。
<p您将看到一个包含您的私钥的文本框。将内容复制并粘贴到文本编辑器中,并将数据保存为 ssl.key 文件。
<p单击继续后,将被询问要为哪个域名创建证书:
<p选择您的域名并继续下一步。
<p您将被询问要为哪个子域名创建证书。在大多数情况下,您希望在这里选择 www,但如果您想要使用不同的子域名进行 SSL,则在此处输入该子域名:
<pStartSSL 将在文本框中为您提供新的证书,就像它为私钥所做的那样:
<p同样,将其复制并粘贴到文本编辑器中,这次将其保存为 ssl.crt。
<p为了验证您的网站,您还需要 StartCom 根 CA 和 StartSSL 的 Class 1 中间服务器 CA,因此,最后一步,转到工具箱窗格,并选择 StartCom CA 证书:
<p在此屏幕上,右键单击并另存两个文件:
<ul>
<li>StartCom 根 CA(PEM 编码)(保存为 ca.pem)</li>
<li>Class 1 中间服务器 CA(保存为 sub.class1.server.ca.pem)</li>
</ul>
<p出于安全原因,StartSSL 加密您的私钥(ssl.key 文件),但您的 Web 服务器需要其未加密版本来处理您站点的加密。将其复制到您的服务器上,并使用以下命令将其解密为 private.key 文件:
openssl rsa -in ssl.key -out private.key
<pOpenSSL 将要求您输入密码,因此输入您在 StartSSL 网站上输入的密码。
<p此时,您应该有五个文件。如果您缺少任何文件,请仔细检查之前的步骤并重新下载它们:
<ul>
<li>ca.pem - StartSSL 的根证书</li>
<li>private.key - 您的私钥的未加密版本(非常小心,确保没有其他人可以访问此文件!)</li>
<li>sub.class1.server.ca.pem - StartSSL 的中间证书</li>
<li>ssl.key - 您的加密私钥的版本(不需要复制到服务器)</li>
<li>ssl.crt - 您的新证书</li>
</ul>
<p您可以丢弃 ssl.key 文件。如果您尚未将其他文件复制到服务器上,请立即将它们上传到服务器:
scp {ca.pem,private.key,sub.class1.server.ca.pem,ssl.crt} YOURSERVER:~
<h2>在 Apache 中激活证书</h2>
<p如果您无法使用证书,那么拥有证书也没有什么好处。本节解释了如何配置 Apache 来使用您的新 SSL 证书。这些说明适用于运行最新版本 Ubuntu VPS 上的 Apache。对于其他基于 Linux 的发行版或 Web 服务器,您需要相应地进行调整。
<p首先,创建我们将存储密钥的文件夹。启用 Apache 的 SSL 模块,并重新启动 Apache。
sudo a2enmod ssl sudo service apache2 restart sudo mkdir -p /etc/apache2/ssl
<p将在上一节中设置的文件复制到 VPS 上的 /etc/apache2/ssl 文件夹中。
sudo mkdir -p /etc/apache2/ssl cp ~/{ca.pem,private.key,sub.class1.server.ca.pem,ssl.crt} /etc/apache2/ssl
<p执行:
ls /etc/apache2/ssl
<p应返回:
ca.pem ssl.crt private.key sub.class1.server.ca.pem
<p现在,打开您的 apache2 配置文件。除非您已经修改了默认配置,否则输入:
nano /etc/apache2/sites-enabled/000-default
<p它应该看起来像这样:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> 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>
<p复制上面的整个脚本(从 <VirtualHost *:80> 到 </VirtualHost>),粘贴到现有脚本下方,并将顶部行从:
<VirtualHost *:80>
<p更改为
<VirtualHost *:443>
<p并在 <VirtualHost *:443> 行之后添加以下行:
SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM SSLCertificateFile /etc/apache2/ssl/ssl.crt SSLCertificateKeyFile /etc/apache2/ssl/private.key SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
<p最终结果应如下所示:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> 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 *:443> SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM SSLCertificateFile /etc/apache2/ssl/ssl.crt SSLCertificateKeyFile /etc/apache2/ssl/private.key SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> 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>
<p保存您的文件,并使用以下命令重新启动 Apache:
sudo service apache2 restart
<p您可以使用以下命令检查 Apache 的日志文件,以查看是否有任何阻止错误:
cat /var/log/apache2/error.log
<p如果一切正常,请尝试在 Web 浏览器中使用 HTTPS URL(例如 https😕/www.YOURSITE.com)访问您的站点。当您的站点加载时,您应该在 URL 旁边看到一个小绿色的挂锁图标。单击它,您应该看到以下内容。连接选项卡应显示该站点的身份已由 StartCom 验证。
<img style=“border:2px solid black; display:block;margin-left:auto;margin-right:auto” src="