如何在VPS上使用免费签名SSL证书设置Apache

来自菜鸟教程
跳转至:导航、​搜索

注意: 您可能需要考虑使用 Let's Encrypt 而不是下面的 StartSSL.com 进程。 Let's Encrypt 是一个新的证书颁发机构,它提供了一种 freeeasy 方式来创建大多数 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> browser</li>
    <li>Apache installed on your VPS (cloud server)</li>
    <li>A domain name you own</li>
    <li>Access to an email address at that domain, either:
        <ol>
            <li>postmaster@duable.co</li>
            <li>hostmaster@duable.co</li>
            <li>webmaster@duable.co</li>
        </ol>
    </li>
</ol>

StartSSL.com 提供完全免费的 验证 (您的用户将 ' 不必看到那些可怕的红色屏幕说“这个网站 ' 不再受信任”)SSL 证书您可以在您的网站上使用。 这很划算,因为大多数公司对类似服务收取 50 至 60 美元的费用。 免费版本设置起来有点棘手,但非常值得。

要开始使用,请浏览至 StartSSL.com 并使用左侧的工具栏,导航至 StartSSL Products,然后导航至 StartSSL™ Free。 从页面顶部选择控制面板的链接。

确保您使用的是谷歌浏览器

<ol>
    <li>Choose the <strong>Express Signup.</strong> option</li>
    <li>Enter your personal information, and click continue.</li>
    <li>You'll get an email with a verification code inside it shortly. Copy and paste that email into the form on StartSSL's page.</li>
    <li>They will review your request for a certificate and then send you an email with the new info. This process might take as long as 6 hours though, so be patient.</li>
    <li>Once the email comes, use the link provided and the new authentication code (at the bottom of the email) to continue to the next step.</li>
    <li>They will ask you to Generate a private key and you will be provided with the choice of "High" or "Medium" grade. Go ahead and choose "High".</li>
    <li>Once your key is ready, click Install.</li>
    <li>Chrome will show a popdown that says that the certificate has been succesfully installed to Chrome.</li>
</ol>


<p>This means your browser is now authenticated with your new certificate
and you can log into the StartSSL authentication areas using your new
certificate. Now, we need to get a properly formatted certificate set up for
use on your VPS. Click on the <a
href="https://www.startssl.com/?app=12">Control panel</a> link again, and
choose the Authenticate option. Chrome will show a popup asking if you want
to authenticate and will show the certificate you just installed. Go ahead
and authenticate with that certificate to enter the control panel.</p>

<p>You will need to validate your domain name to prove that you own the
domain you are setting up a certificate for. Click over to the Validations
Wizard in the <a href="https://www.startssl.com/?app=12">Control panel</a>
and set Type to Domain Name Validation. You'll be prompted to choose
from an email at your domain, something like postmaster@yourdomain.com.</p>

检查您选择的电子邮件地址的电子邮件收件箱。 您将在该地址收到另一封验证电子邮件,因此像以前一样,将验证码复制并粘贴到 StartSSL 网站。

接下来,转到证书向导选项卡并选择创建 Web 服务器 SSL/TLS 证书。

点击继续,然后输入安全密码,其他设置保持不变。

您将看到一个包含您的私钥的文本框。 将内容复制并粘贴到文本编辑器中,并将数据保存到名为 ssl.key 的文件中。

单击继续时,系统会询问您要为哪个域创建证书:

选择您的域并继续下一步。

系统将询问您要为其创建证书的子域。 在大多数情况下,您想在此处选择 www,但如果您想通过 SSL 使用不同的子域,请在此处输入:

StartSSL 将在文本框中为您提供新证书,就像它为私钥所做的那样:

再次,复制并粘贴到文本编辑器中,这次将其保存为 ssl.crt。

您还需要 StartCom 根 CA 和 StartSSL 的 1 类中间服务器 CA 来验证您的网站,因此在最后一步,转到工具箱窗格并选择 StartCom CA 证书:

在此屏幕上,右键单击并另存为两个文件:

<ul>
    <li>StartCom Root CA (PEM Encoded) (save to ca.pem)</li>
    <li>Class 1 Intermediate Server CA (save to sub.class1.server.ca.pem)</li>
</ul>

出于安全原因,StartSSL 会加密您的私钥(ssl.key 文件),但您的 Web 服务器需要它的未加密版本来处理您网站的加密。 要解密它,请将其复制到您的服务器上,然后使用以下命令将其解密为文件 private.key:

openssl rsa -in ssl.key -out private.key

OpenSSL 会询问您的密码,因此请输入您在 StartSSL 网站上输入的密码。

此时您应该有五个文件。 如果您缺少任何内容,请仔细检查前面的步骤并重新下载它们:

<ul>
    <li>ca.pem - StartSSL's Root certificate</li>
    <li>private.key - The unencrypted version of your private key (be very careful no one else has access to this file!)</li>
    <li>sub.class1.server.ca.pem - The intermediate certificate for StartSSL</li>
    <li>ssl.key - The encrypted version of your private key (does not need to be copied to server)</li>
    <li>ssl.crt - Your new certificate</li>
</ul>

您可以丢弃 ssl.key 文件。 如果您还没有将其他人复制到您的服务器上,您现在将它们上传到那里:

scp {ca.pem,private.key,sub.class1.server.ca.pem,ssl.crt} YOURSERVER:~ 
<h2>Activating the certificate in Apache</h2>

如果您不能实际使用它,那么拥有证书就没有任何好处。 本节说明如何配置 Apache 以使用您的新 SSL 证书。 这些说明适用于在最新版本的 Ubuntu VPS 上运行的 Apache。 对于其他基于 Linux 的发行版或 Web 服务器,您必须进行相应调整。

首先,创建我们将存储密钥的文件夹。 启用 Apache 的 SSL 模块,然后重新启动 Apache。

sudo a2enmod ssl
sudo service apache2 restart
sudo mkdir -p /etc/apache2/ssl

将您在上一节中设置的文件复制到您的 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

执行:

ls /etc/apache2/ssl

它应该返回:

ca.pem
ssl.crt
private.key
sub.class1.server.ca.pem

现在,打开您的 apache2 配置文件。 除非您已经修改了默认配置,否则请输入:

nano /etc/apache2/sites-enabled/000-default

它应该看起来像这样:

<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 *:80>

<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 

最终结果应如下所示:

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

保存您的文件并使用以下命令重新启动 Apache:

sudo service apache2 restart

您可以使用此命令检查 Apache 的日志文件以查看是否有任何显示停止错误:

cat /var/log/apache2/error.log

如果一切正常,请尝试在您的网络浏览器中使用 HTTPS URL 访问您的网站(例如 https://www.YOURSITE.com)。 当您的网站加载时,您应该会在 URL 旁边看到一个绿色的小挂锁图标。 单击它,您应该会看到以下内容。 连接选项卡应显示该站点的身份已由 StartCom 验证。

恭喜! 你都准备好了!

<p>Reference Links:</p>

这是我在整理时参考的其他一些帖子。 如果您遇到任何问题,它们可能会成为解决问题的灵感来源:

<ul>
    <li><a href="http://www.debian-administration.org/articles/349">Apache SSL Configuration</a></li>
    <li><a href="http://jasoncodes.com/posts/startssl-free-ssl">StartSSL Apache Guides</a></li>
</ul>

提交人: Nik van der Ploeg