介绍
本教程将向您展示如何从受信任的商业证书颁发机构 (CA) 获取和安装 SSL 证书。 SSL 证书允许 Web 服务器加密其流量,并提供一种机制来验证访问者的服务器身份。 与自签名证书相比,使用从受信任的 CA 购买的 SSL 证书的主要好处是,您网站的访问者不会收到关于无法验证您网站身份的可怕警告。
本教程介绍如何从以下受信任的证书颁发机构获取 SSL 证书:
- 去吧爸爸
- RapidSSL(通过 Namecheap)
您也可以使用您选择的任何其他 CA。
获得 SSL 证书后,我们将向您展示如何在 Nginx 和 Apache HTTP Web 服务器上安装它。
先决条件
在尝试从商业 CA 获取 SSL 证书之前,您应该确保几个先决条件。 本节将介绍从大多数 CA 获得 SSL 证书所需的内容。
钱
必须购买商业 CA 颁发的 SSL 证书。 最好的免费替代品是 Let's Encrypt 颁发的证书。 Let's Encrypt 是一个新的证书颁发机构,可颁发大多数 Web 浏览器都信任的免费 SSL/TLS 证书。
注册域名
在获取 SSL 证书之前,您必须拥有或控制您希望使用该证书的注册域名。 如果您还没有注册域名,您可以在众多域名注册商之一注册一个(例如 Namecheap、GoDaddy 等)。
域验证权
对于基本的域验证过程,您必须有权访问域 WHOIS 记录中的电子邮件地址之一或域本身的“管理员类型”电子邮件地址。 颁发 SSL 证书的证书颁发机构通常会通过向域的 WHOIS 记录中的一个地址或域本身的通用管理员电子邮件地址发送验证电子邮件来验证域控制。 一些 CA 提供了替代的域验证方法,例如基于 DNS 或 HTTP 的验证,这超出了本指南的范围。
如果您希望获得组织验证 (OV) 或扩展验证 (EV) SSL 证书,您还需要向 CA 提供文件以确定网站所有者的合法身份等。
网络服务器
除了前面提到的几点,您还需要一个 Web 服务器来安装 SSL 证书。 这是可通过为其颁发 SSL 证书的域名访问的服务器。 通常,这将是 Apache HTTP、Nginx、HAProxy 或 Varnish 服务器。 如果您在设置可通过您注册的域名访问的 Web 服务器时需要帮助,请按照以下步骤操作:
- 设置您选择的 Web 服务器。 例如,LEMP (Nginx) 或 LAMP (Apache) 服务器——请务必将 Web 服务器软件配置为使用您注册的域的名称
- 配置您的域以使用适当的名称服务器。 如果您的 Web 服务器托管在 DigitalOcean 上,本指南可以帮助您进行设置:如何从公共域注册商指向 DigitalOcean 的名称服务器
- 将您的 Web 服务器的 DNS 记录添加到您的名称服务器。 如果您使用 DigitalOcean 的名称服务器,请按照本指南了解如何添加适当的记录:如何使用 DigitalOcean 设置主机名
选择您的证书颁发机构
如果您不确定要使用哪个证书颁发机构,则需要考虑一些重要因素。 在概述级别上,最重要的是您选择的 CA 以您满意的价格提供您想要的功能。 本节将更多地关注大多数 SSL 证书购买者应该了解的功能,而不是价格。
根证书计划成员资格
最关键的一点是,您选择的CA是最常用的操作系统和网络浏览器的根证书程序的成员,即 它是一个“受信任的”CA,其根证书受到普通浏览器和其他软件的信任。 如果您网站的 SSL 证书由受信任的 CA 签名,则其身份被信任 CA 的软件认为是有效的——这与自签名 SSL 证书形成对比,自签名 SSL 证书也提供加密功能,但伴随着身份验证警告这让大多数网站访问者感到反感。
您将遇到的大多数商业 CA 都是通用根 CA 程序的成员,并且会说它们与 99% of 浏览器兼容,但在购买证书之前检查一下也没有什么坏处。 例如,Apple 在此处 提供了适用于 iOS8 的可信 SSL 根证书列表。
证书类型
确保选择提供所需证书类型的 CA。 许多 CA 在各种名称和定价结构下提供这些证书类型的变体,通常是令人困惑的。 以下是每种类型的简短说明:
- Single Domain:用于单个域,例如
example.com
。 请注意,不包括其他子域,例如www.example.com
- 通配符:用于域及其任何子域。 例如,
*.example.com
的通配符证书也可用于www.example.com
和store.example.com
- 多域 :称为 SAN 或 UC 证书,它们可以与添加到主题备用名称字段的多个域和子域一起使用。 例如,单个多域证书可以与
example.com
、www.example.com
和example.net
一起使用
除了上述证书类型之外,CA 还提供不同级别的验证。 我们将在这里介绍它们:
- 域验证 (DV):在 CA 验证请求者拥有或控制相关域后颁发 DV 证书
- Organization Validation (OV):OV证书只有在颁发CA验证请求者合法身份后才能颁发
- Extended Validation (EV):EV 证书只有在颁发 CA 根据一套严格的准则验证请求者的合法身份后才能颁发。 此类证书的目的是为您的网站访问者提供组织身份合法性的额外保证。 EV 证书可以是单域或多域,但不能是通配符
本指南将向您展示如何从 GoDaddy 和 RapidSSL 获取单个域或通配符 SSL 证书,但获取其他类型的证书非常相似。
附加的功能
许多 CA 提供大量“奖励”功能,以区别于其他 SSL 证书颁发供应商。 其中一些功能最终可以为您省钱,因此在购买之前仔细权衡您的需求与产品是很重要的。 需要注意的功能示例包括免费证书重新颁发或适用于 www.
和域基本名称的单个域定价证书,例如 www.example.com
与 example.com
的 SAN
生成 CSR 和私钥
在整理完所有先决条件并知道要获取的证书类型之后,就该生成证书签名请求 (CSR) 和私钥了。
如果您计划使用 Apache HTTP 或 Nginx 作为您的 Web 服务器,请使用 openssl
在您的 Web 服务器上生成您的私钥和 CSR。 在本教程中,我们只会将所有相关文件保存在我们的主目录中,但可以随意将它们存储在您服务器上的任何安全位置:
cd ~
要生成名为 example.com.key
的私钥和名为 example.com.csr
的 CSR,请运行以下命令(将 example.com
替换为您的域名):
openssl req -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr
此时,系统将提示您提供几行信息,这些信息将包含在您的证书请求中。 最重要的部分是 Common Name 字段,它应该与您要使用证书的名称相匹配,例如 example.com
、www.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 []:sammy@example.com
这将生成一个 .key
和 .csr
文件。 .key
文件是您的私钥,应妥善保管。 .csr
文件是您将发送给 CA 以请求您的 SSL 证书的文件。
在向 CA 提交证书请求时,您需要复制并粘贴您的 CSR。 要打印 CSR 的内容,请使用以下命令(将文件名替换为您自己的):
cat example.com.csr
现在我们准备从 CA 购买证书。 我们将通过 Namecheap 展示两个示例,GoDaddy 和 RapidSSL,但您可以随意从任何其他供应商处获取证书。
示例 CA 1:通过 Namecheap 的 RapidSSL
Namecheap 提供了一种从各种 CA 购买 SSL 证书的方法。 我们将介绍从 RapidSSL 获取单个域证书的过程,但如果您想要不同类型的证书,您可以偏离。
注意:如果您从 RapidSSL 为您的域的 www
子域请求单个域证书(例如 www.example.com
),他们将使用您的基本域的 SAN 颁发证书。 例如,如果您的证书请求是针对 www.example.com
,则生成的证书将适用于 www.example.com
和 example.com
。
选择和购买证书
进入 Namecheap 的 SSL 证书页面:https://www.namecheap.com/security/ssl-certificates.aspx。
在这里,您可以开始选择您的验证级别、证书类型(“域安全”)或 CA(“品牌”)。
对于我们的示例,我们将单击“域验证”框中的 Compare Products 按钮。 然后我们会找到“RapidSSL”,然后点击【X44X】加入购物车【X59X】按钮。
此时,您必须注册或登录 Namecheap。 然后完成付款过程。
申请证书
支付您选择的证书后,转到“Hi Username”部分下的 Manage SSL Certificates 链接。
在这里,您将看到您通过 Namecheap 购买的所有 SSL 证书的列表。 单击要使用的证书的 立即激活 链接。
现在选择您的网络服务器的软件。 这将决定 Namecheap 将提供给您的证书的格式。 常用的选项是“Apache + MOD SSL”、“nginx”或“Tomcat”。
将您的 CSR 粘贴到框中,然后单击 Next 按钮。
您现在应该处于流程中的“选择批准人”步骤,这会将验证请求电子邮件发送到您域的 WHOIS 记录中的地址或您获得的域的 管理员 类型地址证书。 选择要将验证电子邮件发送到的地址。
提供“行政联系信息”。 点击【X10X】提交订单【X26X】按钮。
验证域
此时,将向“批准人”地址发送一封电子邮件。 打开电子邮件并批准证书请求。
下载证书
批准证书后,证书将通过电子邮件发送给技术联系人。 为您的域颁发的证书和 CA 的中间证书将位于电子邮件的底部。
将它们复制并保存到您生成私钥和 CSR 的同一位置的服务器上。 使用域名和 .crt
扩展名命名证书,例如 example.com.crt
,并将中间证书命名为intermediate.crt
。
证书现在可以安装在您的 Web 服务器上。
示例 CA 2:GoDaddy
GoDaddy 是一种流行的 CA,具有所有基本证书类型。 我们将介绍获取单个域证书的过程,但如果您想要不同类型的证书,您可以偏离。
选择和购买证书
进入 GoDaddy 的 SSL 证书页面:https://www.godaddy.com/ssl/ssl-certificates.aspx。
向下滚动并单击 Get Started 按钮。
从下拉菜单中选择所需的 SSL 证书类型:单域、多域 (UCC) 或通配符。
然后选择您的计划类型:域、组织或扩展验证。
然后选择期限(有效期)。
然后点击加入购物车按钮。
查看您当前的订单,然后单击 Proceed to Checkout 按钮。
完成注册和付款流程。
申请证书
完成订单后,点击SSL证书*按钮(或点击右上角的我的账户 > 管理SSL证书)。
找到刚刚购买的SSL证书,点击【X63X】设置【X73X】按钮。 如果您之前没有使用 GoDaddy 获取 SSL 证书,系统会提示您设置“SSL 证书”产品,并将您最近的证书订单与该产品关联(单击绿色的 设置 按钮并等待刷新浏览器前几分钟)。
将“SSL 证书”产品添加到您的 GoDaddy 帐户后,您应该会看到“新证书”和“启动”按钮。 单击新证书旁边的 Launch 按钮。
通过将其粘贴到框中提供您的 CSR。 默认情况下将使用 SHA-2 算法。
勾选我同意复选框,然后单击申请证书按钮。
验证域
现在您必须验证您是否拥有域的控制权,并向 GoDaddy 提供一些文档。 GoDaddy 将向您的域 WHOIS 记录中的地址发送域所有权验证电子邮件。 按照发送给您的电子邮件中的说明进行操作,并授权颁发证书。
下载证书
在向 GoDaddy 验证您控制域后,检查您的电子邮件(您在 GoDaddy 注册时使用的电子邮件)是否有一条消息表明您的 SSL 证书已颁发。 打开它,然后点击下载证书链接(或单击 GoDaddy 控制面板中 SSL 证书旁边的 Launch 按钮)。
现在单击 下载 按钮。
从服务器类型下拉菜单中选择您正在使用的服务器软件——如果您使用的是Apache HTTP或Nginx,请选择“Apache”——然后单击下载压缩文件按钮。
提取 ZIP 存档。 它应该包含两个 .crt
文件; 您的 SSL 证书(应该有一个随机名称)和 GoDaddy 中间证书包(gd_bundle-g2-1.crt
)。 复制两个您的网络服务器。 将证书重命名为带有.crt
扩展名的域名,例如 example.com.crt
,并将中间证书包重命名为 intermediate.crt
。
证书现在可以安装在您的 Web 服务器上。
在 Web 服务器上安装证书
从您选择的 CA 获得证书后,您必须将其安装在您的 Web 服务器上。 这涉及在您的 Web 服务器软件配置中添加一些与 SSL 相关的行。
在本节中,我们将介绍 Ubuntu 14.04 上的基本 Nginx 和 Apache HTTP 配置。
我们将假设以下几点:
- 私钥、SSL 证书以及 CA 的中间证书(如果适用)位于
/home/sammy
的主目录中 - 私钥称为
example.com.key
- SSL 证书称为
example.com.crt
- CA 中间证书位于名为
intermediate.crt
的文件中 - 如果您启用了防火墙,请确保它允许端口 443 (HTTPS)
注意:在真实环境中,这些文件应该存放在只有运行Web服务器主进程的用户(通常是root
)可以访问的地方。 私钥应保持安全。
Nginx
如果您想在 Ubuntu 14.04 上将您的证书与 Nginx 一起使用,请按照本节操作。
使用 Nginx,如果您的 CA 包含中间证书,您必须创建一个包含您的证书和 CA 的中间证书的单个“链式”证书文件。
切换到包含您的私钥、证书和 CA 中间证书的目录(在 intermediate.crt
文件中)。 对于示例,我们将假设它们位于您的主目录中:
cd ~
假设您的证书文件名为 example.com.crt
,请使用此命令创建一个名为 example.com.chained.crt
的组合文件(将突出显示的部分替换为您自己的域):
cat example.com.crt intermediate.crt > example.com.chained.crt
现在转到您的 Nginx 服务器块配置目录。 假设它位于 /etc/nginx/sites-enabled
,使用此命令更改为:
cd /etc/nginx/sites-enabled
假设要将 SSL 添加到您的 default
服务器块文件,打开文件进行编辑:
sudo vi default
找到并修改 listen
指令,并将其修改为如下所示:
listen 443 ssl;
然后找到 server_name
指令,并确保它的值与您的证书的通用名称匹配。 此外,添加 ssl_certificate
和 ssl_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 以加载新配置并通过 HTTPS 启用 TLS/SSL!
sudo service nginx restart
通过 HTTPS 访问您的站点进行测试,例如 https://example.com
。
阿帕奇
如果想在 Ubuntu 14.04 上将您的证书与 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
找到 <VirtualHost *:80>
条目并对其进行修改,以便您的 Web 服务器将侦听端口 443
:
<VirtualHost *:443>
然后添加 ServerName
指令,如果它不存在(在此处替换您的域名):
ServerName example.com
然后添加以下行以指定您的证书和密钥路径(在此处替换您的实际路径):
SSLEngine on SSLCertificateFile /home/sammy/example.com.crt SSLCertificateKeyFile /home/sammy/example.com.key
如果您使用的是 Apache 2.4.8 或更高版本,请通过添加以下行指定 CA 中间包(替换路径):
SSLCACertificateFile /home/sammy/intermediate.crt
如果您使用的是旧版本的 Apache,请使用此行指定 CA 中间包(替换路径):
SSLCertificateChainFile /home/sammy/intermediate.crt
此时,您的服务器已配置为仅侦听 HTTPS(端口 443),因此不会处理对 HTTP(端口 80)的请求。 要将 HTTP 请求重定向到 HTTPS,请将以下内容添加到文件顶部(替换两个位置的名称):
<VirtualHost *:80> ServerName example.com Redirect permanent / https://example.com/ </VirtualHost>
保存并退出。
通过运行以下命令启用 Apache SSL 模块:
sudo a2enmod ssl
现在重新启动 Apache 以加载新配置并通过 HTTPS 启用 TLS/SSL!
sudo service apache2 restart
通过 HTTPS 访问您的站点进行测试,例如 https://example.com
。 您还需要尝试通过 HTTP 连接,例如 http://example.com
确保重定向正常工作!
结论
现在您应该对如何添加受信任的 SSL 证书来保护您的 Web 服务器有了一个很好的了解。 一定要货比三家,寻找您满意的 CA!