在Web服务器上安装由商业CA颁发的SSL证书

提供:ZStack云计算

前言

本文将介绍如何从一个可信的商业CA机构(Certificate Authority)获取SSL证书并将其安装到你的服务器上。有了SSL证书,Web服务器可以加密与之通讯的信息,并让其访问者可以验证该服务器的身份。SSL证书可以自己签发,但购买一个CA认证的证书有很大的好处,就是你的访问者不会看到诸如“攻击者可能会窃取您的信息”之类的吓人警告。

本教程使用的CA机构有如下两个:

  • GoDaddy
  • RapidSSL(通过Namecheap提供)

你也可以从其他CA机构获取SSL证书。获取证书后,本文将介绍如何将该证书安装到Nginx和Apache HTTP Web服务器上。

准备工作

本章节所述的操作适用于大多数CA机构。

商业CA机构提供的SSL证书是需要购买的。此外也有提供免费证书的CA机构,可能最好的一个就是Let’s Encrypt,该机构认证的SSL/TLS证书在大部分Web浏览器中都被认为是可信的。

一个域名

SSL证书必须与域名配合使用。如果你还没注册过域名,则可以找一个域名供应商(如Namecheap、GoDaddy等)购买一个。

该域名的验证权限

你的域名的WHOIS记录上应该有你的邮箱,或者,你的邮箱应该出现在该域名“admin type”邮箱的列表中。CA在签发SSL证书时会给上述邮箱发送认证邮件,需要在该邮件里操作才能完成认证过程。不过,也有一些CA提供邮件之外的备选认证方式,比如基于DNS或HTTP的方式,此类方式就不在本文中讨论了。

如果你想要获取的是OV(机构验证型)或EV(拓展验证型)类SSL证书,那么你还需要向CA提供你的组织相关的法律文件。

Web服务器

你的SSL证书需要安装在一台Web服务器上才有效果。该服务器通过上面提到的那个域名访问。Web服务器一般会是一台Apache HTTP,或者Nginx,或者HAProxy,或者是Varnish服务器。有关Web服务器的安装配置可以参考如下文章:

  1. LEMP (Nginx),LAMP (Apache)的安装配置
  2. 将你的域名指向你的服务器
  3. 往nameserver上添加DNS记录

CA机构的选择

如果你还不确定自己要使用哪家CA,那么大体来说的选择标准就是:对于你所需要的功能,它提供的价格是你愿意接受的。下面列出了一些功能供参考。

根证书计划成员(Root Certificate Program Memberships)

最重要的一点是,你选择的CA应该是各大浏览器和操作系统的根证书计划当中的成员之一,即,该CA是“可信”的,大部分浏览器和操作系统将该CA颁发的证书视为可信。如果浏览器和操作系统不信任某个CA,那么该CA颁发的证书与自签发的证书一样,访问者在访问该证书加密的网站时都会看到安全警告。

大部分商业的CA机构都是根证书计划中的成员,并且他们自己也号称与99%的浏览器兼容。不过保险起见,最好还是在购买之前自己检查一下。比如,这里是苹果iOS 8的信任列表。

证书类型

你需要什么类型的证书?你选择的CA提供的证书需要满足你的需求。各个CA提供的证书种类繁多,各种名称和定价标准容易把人搞晕。下面简单介绍一下不同类型的证书:

  • 单域型(Single Domain):仅可用于单一域名,如example.com,而www.example.com等子域名则不包含。
  • 通配型(Wildcard):可用于一域名以及其下的所有子域名。比如,针对*.example.com的证书可以用于www.example.com以及store.example.com等任何子域名。
  • 多域型(Multiple Domain):也被称作SAN或UC证书,可用于填写在Subject Alternative Name中的多个域名以及其子域名。比如,一个多域型证书可以同时对example.comwww.example.com以及example.net生效。

除了上述类型之外,CA还提供不同的认证等级:

  • 域名型(Domain Validation,DV):CA只需验证申请者的确拥有该域名即可颁发证书。
  • 机构验证型(Organization Validation,OV):CA需要验证申请者的法律身份才可颁发证书。
  • 拓展验证型(Extended Validation,EV):CA需要经过一套严密的验证过程以确认申请者的法律身份。如此,CA会为EV型证书授权的组织网站进行高规格的背书,不过,EV型证书只可以是单域型或多域型,而不能是通配型的。

本文只介绍单域型和通配型证书的获取方式。不过,其他类型证书的申请过程基本是差不多的。

其他功能

有些CA还提供一些“额外”的功能,其中一些功能也许能帮你省钱。比如,有些CA提供了免费续租功能,有些CA则以单域型的价格提供了可同时作用于www.example.comexample.com的多域型证书。

生成CSR和私钥

上述准备工作完成后,可以生成一个CSR(certificate signing request,证书签名请求)以及一个私钥了。

对于Apache HTTP和Nginx用户,可以使用openssl在你的Web服务器上生成CSR和私钥。以下步骤将在你的个人主目录下保存这两个文件,你自己操作的时候可以保存在其他目录下。

cd ~

生成名为example.com.key的私钥和名为example.com.csr的CSR:

openssl req -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr

然后,OpenSSL会要求你填写一些信息,如国家、省市、企业名称等。一般来说,只有Common Name项是最重要的,请确保这里填写的是你网站将要使用的域名(如example.comwww.example.com,对于通配型需要填写*.example.com)。如果你申请的证书是OV或EV型的,那么所有项目都需要照实认真填写。

Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]

这样就生成了两个文件。.key文件是私钥,务必安全保存。.csr文件将要发送给CA作为SSL证书的申请材料。

CSR的提交是通过复制粘贴完成的,使用cat命令查看CSR的内容以进行复制:

cat example.com.csr

接下来就可以去CA的网站上购买SSL证书了。

示范1:在Namecheap旗下的RapidSSL上购买证书

Namecheap提供了从不同CA购买SSL证书的渠道,本文选用的是RapidSSL,你也可以选择其他家CA。

注:RapidSSL的单域型证书如果是为www子域名购买的,那么他们家会附送该基础域名的SAN证书。比如,针对www.example.com申请单域型证书,得到的证书对www.example.comexample.com都生效。

证书的选择与购买

进入Namecheap的SSL证书页面:https://www.namecheap.com/security/ssl-certificates.aspx

这里可以选择CA机构(Brand),证书的类型以及验证等级(Domains Secured)。

我们直接在“Domain Validation”里面点击“Compare Products”,找到“RapidSSL”,再点击“Add to Cart”加入购物车。输入你的Namecheap登陆信息,完成支付。

请求证书

支付完毕后,从“HiUsername”链接进入“Manage SSL Certificates”页面:

在Web服务器上安装由商业CA颁发的SSL证书_第1张图片

该页面下列出了你在Namecheap上购买的所有SSL证书。找到刚才购买的那个证书,点击“Activate Now”以激活:

在Web服务器上安装由商业CA颁发的SSL证书_第2张图片

选择Web服务器的种类,如“Apache + MOD SSL”、“nginx”或“Tomcat”。这将决定证书文件的格式。

将你刚才复制的CSR内容粘贴到文本框里,点击“Next”按钮。

你现在应该进入到了“Select Approver”这一步骤,你可以选择要给你的域名的WHOIS记录中的邮箱还是域名的管理员邮箱发送一封确认邮件。

提供“Administrative Contact Information”(管理员联系方式),再点击“Submit order”以完成提交。

认证域名

到你的邮箱里检查CA发来的邮件,确认请求证书。

下载证书

确认之后,证书会通过邮件发送给你刚才留下的管理员邮箱,在该邮件末尾处可以找到,一共两个证书,一个是正式的,一个是中级证书(intermediate certificate)。

把两个证书复制到刚才生成私钥和CSR的目录下。把正式证书命名为你的域名加.crt后缀,如example.com.crt;中级证书命名为intermediate.crt

如此就可以把证书安装的Web服务器上了。

示范2:GoDaddy

GoDaddy是一个很流行的CA机构,它可以签发所有类型的证书。本文将以单域型证书的申请作为示范。

证书的选择和购买

点击此处进入GoDaddy的SSL证书页面:https://www.godaddy.com/ssl/ssl-certificates.aspx

点击“Get Started”按钮。

在Web服务器上安装由商业CA颁发的SSL证书_第3张图片

从下拉菜单中选择你需要的SSL证书类型:单域型,多域型(UCC),或通配型。

在Web服务器上安装由商业CA颁发的SSL证书_第4张图片

然后,选择认证等级:域名级,机构验证型,或拓展验证型。

然后,选择有效期。

选择完毕后,点击“Add to Cart”按钮加入购物车。

检查一下订单信息,如无误可点击“Proceed to Checkout”按钮,完成支付。

申请证书

完成支付后,点击“SSL Certificates”按钮(或者,也可以从右上角的 My Account > Manage SSL Certificates进入 )。

找到刚才购买的证书,点击“Set Up”按钮。如果你是首次使用GoDaddy购买SSL证书,网站会提示你做一些设置以将刚才购买的证书与你的账号绑定。

设置完毕后,现在应该能够在列表中看到刚才新购买的证书。点击旁边的“Launch”按钮。

将之前复制的CSR内容粘贴到文本框中。默认算法是SHA-2。

勾选“I agree”,然后点击“Request Certificate”按钮。

验证域名

GoDaddy将把验证邮件发送到你所申请域名的WHOIS记录上的邮箱里。到那个邮箱里找到验证邮件,根据邮件内容的提示完成验证步骤。

下载证书

域名验证完毕后,你的GoDaddy注册邮箱里会收到一封邮件,里面有SSL证书的下载地址(或者,你也可以在GoDaddy控制面板中点击证书旁边的“Launch”按钮)。

点击“Download”按钮开始下载。

选择服务器软件的种类。对于Apache HTTP和Nginx,选择“Apache”,然后点击“Download Zip File”以下载Zip文件。

将下载的ZIP文件解压缩,其中应该包含了两个.crt文件:一个是正式的证书(现在的文件名是随机生成的),一个是中级证书(文件名是gd_bundle-g2-1.crt)。将两个文件复制到Web服务器上,并将正式证书重命名为你的域名加.crt扩展名(如example.com.crt),将临时证书命名为intermediate.crt

现在可以在Web服务器上安装证书了。

在Web服务器上安装证书

在Web服务器上安装证书,需要在配置文件中添加几行SSL相关的内容。本文将介绍Apache HTTP和Nginx的配置。

安装步骤中的命名规范如下:

  • 私钥和SSL证书文件的储存路径:/home/sammy
  • 私钥文件名:example.com.key
  • SSL证书文件名:example.com.crt
  • 中级证书文件名:intermediate.crt

如果你的服务器上有防火墙,确保443端口是开启的。

注:在生产环境下,上述文件所存放的位置——尤其是私钥——仅对Web服务器主进程的运行用户(通常是root)开放。私钥要存放在安全的地方。

Nginx

对于Nginx,你需要把正式证书和中级证书放在一起创建一个“证书链”文件。

进入证书文件所在的目录(本文使用的是用户主目录):

cd ~

使用如下命令创建证书链文件example.com.chained.crt

cat example.com.crt intermediate.crt > example.com.chained.crt

进入Nginx配置目录,默认位置在/etc/nginx/sites-enabled

cd /etc/nginx/sites-enabled

打开该服务器所使用的块文件(本文使用default):

sudo vi default

找到listen条目,将其编辑为如下内容:

    listen 443 ssl;

然后,找到server_name条目,确保填写正确的域名,并在其下添加两个条目ssl_certificatessl_certificate_key

    server_name example.com;
    ssl_certificate /home/sammy/example.com.chained.crt;
    ssl_certificate_key /home/sammy/example.com.key;

再添加如下条目,以使用最安全的SSL协议:

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

如果要把HTTP访问重定向到HTTPS,可以在文件开头处添加如下内容:

server {
    listen 80;
    server_name example.com;
    rewrite ^/(.*) https://example.com/$1 permanent;
}

检查填写的域名、文件路径等无误后,保存退出。

重启Nginx以启用TLS/SSL使HTTPS生效:

sudo service nginx restart

现在到浏览器访问网站进行测试(如https://example.com)。

Apache

Apache的虚拟主机配置文件默认在/etc/apache2/sites-available/000-default.conf。进行编辑之前我们先做个备份:

cd /etc/apache2/sites-available
cp 000-default.conf 000-default.conf.orig

然后用编辑器打开文件:

sudo vi 000-default.conf

找到,将端口改成443:


找到ServerName条目,填写你的域名(如果该条目不存在则需添加):

ServerName example.com

然后,将如下内容复制粘贴到文件中(记得将文件路径替换成你自己的):

SSLEngine on
SSLCertificateFile /home/sammy/example.com.crt
SSLCertificateKeyFile /home/sammy/example.com.key

Apache 2.4.8及以上的版本,添加如下条目以指定中级证书位置:

SSLCACertificateFile /home/sammy/intermediate.crt

老版本Apache则使用下面这行内容:

SSLCertificateChainFile /home/sammy/intermediate.crt

现在,Apache服务器仅监听443端口,而发送给HTTP(80端口)的请求会被丢弃。我们需要在文件开头处添加如下内容以对HTTP请求进行转发:


   ServerName example.com
   Redirect permanent / https://example.com/

保存退出。

输入如下命令以启用Apache SSL模块:

sudo a2enmod ssl

重启Apache以使更改生效:

sudo service apache2 restart

在浏览器里访问你的网站测试一下(如https://example.com)。记得也访问一下http://example.com以确保转发是正常工作的。

总结

至此,你应该知道如何给你的Web服务器安装一个可信的SSL证书了。好好选一个你喜欢的CA吧!

本文来源自DigitalOcean Community。英文原文:How To Install an SSL Certificate from a Commercial Certificate Authority by Mitchell Anicas

翻译:lazycai

你可能感兴趣的:(在Web服务器上安装由商业CA颁发的SSL证书)