WordPress网站:如何从商业CA安装SSL证书(完整指南)

介绍

本教程将向您展示如何从一个值得信任的商业证书颁发机构(CA)获取并安装SSL证书。SSL证书允许Web服务器加密其通信,并提供验证服务器身份的机制。使用SSL的网站通过HTTPS协议进行访问。

在2010年代中期之前,许多较小的网站并非总是使用SSL或HTTPS。自那时以来,对安全性的期望增加了,并且为了提供免费且可信任的大规模SSL证书,Let’s Encrypt项目应运而生,几乎每个人都能根据需求使用HTTPS。

然而,Let’s Encrypt的证书存在一些限制。它们每3个月过期一次,通常需要您准备一个可正常工作的自动更新脚本,并且在无法使用此脚本的环境中使用起来可能会很麻烦。Let’s Encrypt也不提供扩展验证证书,这类证书能够验证您网站的合法所有权,也不提供通配符证书,这类证书能自动匹配您网站的每个可能的子域名(如shop.example.com),无需您手动注册每一个子域名。

对大多数用户来说,这些都不会是重大的限制。Let’s Encrypt是许多个人和商业网站的热门选择。然而,如果您有特殊的企业软件要求,或者进行非常庞大的商业运营,您应该考虑从商业证书颁发机构购买证书。

本教程介绍了如何从可信任的证书机构选择和部署SSL证书。在您获取了SSL证书之后,本教程将指导您在Nginx和Apache网页服务器上进行安装。

先决条件

在尝试从商业CA获得SSL证书之前,有几个前提条件:

  • 已注册的域名。 本教程将全程使用example.com。您可以从Namecheap购买域名,通过Freenom免费获取,或使用您选择的域名注册商。
  • 可访问您域名WHOIS记录中的电子邮件地址之一,或域名本身的“管理类型”电子邮件地址。 颁发SSL证书的证书颁发机构通常会通过向域名WHOIS记录中的某个地址或域名本身的通用管理电子邮件地址发送验证邮件来验证域名控制权。要获得扩展验证证书,您还需要向CA提供文件以确立网站所有者的合法身份等。
  • 为您的服务器设置了DNS记录。 如果您正在使用Silicon Cloud,请参阅我们的DNS文档了解如何添加它们。

本教程将根据《Ubuntu 22.04初始服务器设置教程》提供配置指南,教您如何设置一台Ubuntu 22.04服务器,包括创建一个启用sudo的非root用户以及设置防火墙。大多数现代Linux发行版的操作类似。

您还应该安装像Nginx或Apache这样的Web服务器,按照《Ubuntu 22.04上安装Nginx的方法》或《Ubuntu 22.04上安装Apache Web服务器的方法》进行操作。确保您的域名拥有一个服务器块(或Apache虚拟主机)。

第一步 – 选择您的证书颁发机构

如果您不确定应该使用哪个证书机构,有几个因素需要考虑。

根证书计划成员身份

最关键的是您选择的CA是最常用操作系统和浏览器的根证书计划成员,也就是说,它是一个“可信任的”CA,其根证书被常见浏览器和其他软件所信任。如果您网站的SSL证书由一个受信任的CA进行签名,那么它的身份在信任该CA的软件中被认为是有效的。

大多数商业证书颁发机构(CA)都是常见根证书计划的成员,但在购买证书之前检查一下也无妨。以苹果为例,该公司公布了其可信任的SSL根证书清单

证书类型

请确保您选择的CA提供您所需的证书类型。许多CA以各种名称和价格结构提供这些证书类型的变体。下面是每种类型的简要描述:

  • 单域名证书 (Single Domain): 用于单个域名,例如example.com。请注意,不包括额外的子域名,例如www.example.com
  • 通配符证书 (Wildcard): 用于一个域名及其任何子域名。例如,一个用于*.example.com的通配符证书也可以用于www.example.comstore.example.com
  • 多域名证书 (Multiple Domain): 也称为SAN或UC证书,这些证书可以与添加到主题备用名称(Subject Alternative Name)字段的多个域名和子域名一起使用。例如,一个多域名证书可以同时用于example.comwww.example.comexample.net

除了上述提到的证书类型外,CA还提供不同级别的验证。

  • 域名验证 (Domain Validation, DV): DV证书在CA验证请求者拥有或控制相关域名后颁发。
  • 组织验证 (Organization Validation, OV): OV证书仅在颁发CA验证请求者的合法身份后才能颁发。
  • 扩展验证 (Extended Validation, EV): EV证书仅在颁发CA根据严格的指导方针验证请求者的合法身份等信息后才能颁发。这类证书的目的是向网站访问者提供对其组织身份合法性的额外保证。EV证书可以是单域名或多域名,但不能是通配符。

附加功能

许多颁发SSL证书的机构提供各种各样的“额外”功能,以与其他证书供应商区别开来。其中一些功能可以帮助您节省资金,因此在购买之前,您需要权衡自己的需求和所提供的功能。值得关注的一些功能示例包括免费的证书补发或适用于www.和域名基本名称的单域名价格证书,例如www.example.com与一个example.com的SAN。

第二步 – 生成CSR和私钥

在您整理好先决条件并确定需要的证书类型后,就可以生成证书签名请求(CSR)和私钥了。

如果您计划在您的网页服务器上使用Apache HTTP或Nginx,您可以使用openssl命令在您的网页服务器上生成您的私钥和CSR。在这个教程中,您可以将所有相关文件保存在您的主目录中,但也可以选择在服务器上的任何安全位置存储它们。

为了生成一个名为example.com.key的私钥和一个名为example.com.csr的证书签名请求(将example.com替换为您的域名),运行以下命令:

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

在这一步,您将被提示提供一些信息,这些信息将包含在您的证书申请中。其中最重要的部分是“通用名称”(Common Name)字段,它应该与您想要使用证书的名称相匹配,例如example.comwww.example.com,或(对于通配符证书申请)*.example.com。如果您打算获得OV或EV证书,请确保所有其他字段准确反映您的组织或业务细节。提供“挑战密码”(Challenge Password)是不必要的。

例如:

输出

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 Please enter the following ‘extra’ attributes to be sent with your certificate request A challenge password []: An optional company name []:

这将生成一个.key和.csr文件。.key文件是您的私钥,应妥善保管。而.csr文件是您将发送给证书颁发机构(CA)以请求SSL证书的文件。

  1. ls example.com*

 

输出

example.com.csr example.com.key

在将证书请求提交给您的CA时,您需要复制并粘贴您的CSR内容。要打印CSR的内容,请使用cat命令。

cat example.com.csr

现在您已准备好从CA购买证书。

第三步 – 购买并获取证书

目前有许多商业证书颁发机构(CA)供应商,您可以对比和选择最适合您设置的选项。例如,Namecheap作为SSL证书经销商,过去曾为了提供最佳价值而更换上游CA供应商。目前,他们提供来自Comodo CA的证书。以下是截至2022年12月的一份样本产品列表。

Namecheap SSL Offerings

选择完成后,您需要上传在之前步骤中生成的CSR。您的CA提供商可能还会有一个“批准者”步骤,会向您域名WHOIS记录中的地址或域名管理员类型的地址发送验证请求邮件,以便获取证书。

批准证书后,该证书将发送至指定的管理员邮箱。请将其复制并保存到与生成私钥和CSR的同一服务器位置。证书应以域名命名,并添加.crt扩展名,例如example.com.crt;中间证书命名为intermediate.crt。

证书现在可以安装在您的Web服务器上,但首先,您可能需要对防火墙进行一些更改。

第四步 – 更新防火墙以允许HTTPS

如果按照我们的Ubuntu 22.04设置指南所推荐的方式启用了UFW防火墙,您需要调整设置以允许HTTPS流量。在安装过程中,Nginx和Apache都会向UFW注册一些配置文件。

通过输入以下命令可以查看当前设置。

  1. sudo ufw status

 

如果您收到的输出仅包含Nginx HTTP或Apache,那么只有HTTP流量被允许访问Web服务器。

输出

Status: active To Action From — —— —- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

为了进一步接收HTTPS流量,请允许Nginx Full或Apache Full配置文件,并删除冗余的HTTP配置允许。

  1. sudo ufw allow ‘Nginx Full’
  2. sudo ufw delete allow ‘Nginx HTTP’

 

那应该会产生这样的结果:

  1. sudo ufw status

 

输出

Status: active To Action From — —— —- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

在最后一步,您将安装证书。

第五步 – 在服务器上安装证书

在从选定的CA获取到您的证书后,您需要将其安装在您的网络服务器上。这需要在您的网络服务器软件配置中添加几行与SSL相关的代码。

本教程将涵盖在Ubuntu 22.04上配置Nginx和Apache,但大多数现代Linux发行版的操作类似。本教程还做出以下假设:

  • 私钥、SSL证书以及(如果适用)CA的中间证书位于主目录,即/home/sammy
  • 私钥名为example.com.key
  • SSL证书名为example.com.crt
  • 您的提供商返回的CA中间证书位于名为intermediate.crt的文件中。

注意:在生产环境中,这些文件应该被存放在只有网络服务器进程(通常是root用户)可以访问的地方,并且私钥应该保持安全。例如,Let’s Encrypt将其生成的证书存储在/etc/letsencrypt目录中。由于多服务器配置的复杂性,实际的生产例子会有所不同。

Nginx 反向代理服务器

这是文章《如何从商业证书颁发机构安装SSL证书》的第3部分(共4部分)。

在Nginx上部署SSL证书

以下是手动在Nginx上部署SSL证书的步骤。

如果您的CA(证书颁发机构)返回的只是中间证书,您必须创建一个包含您的证书和CA中间证书的单个“链接”证书文件。

假设您的证书文件名为example.com.crt,您可以使用cat命令将文件连接起来,创建一个名为example.com.chained.crt的合并文件。

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

使用Nano或您喜欢的文本编辑器,打开默认的Nginx服务器配置文件进行编辑。

sudo nano /etc/nginx/sites-enabled/default

找到listen指令,并将其修改为listen 443 ssl;

默认情况下,/etc/nginx/sites-enabled/default文件内容可能如下:

…
server {
    listen 443 ssl;
…

接下来,在相同的服务器块中找到server_name指令,并确保其值与您证书的通用名称相匹配。此外,添加ssl_certificatessl_certificate_key指令以指定证书和私钥文件的路径。

Nginx的默认配置文件路径是/etc/nginx/sites-enabled/default

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

为了只允许最安全的SSL协议和密码,将以下行添加到文件中。

/etc/nginx/sites-enabled/default可以简单地理解为位于路径/etc/nginx/sites-enabled/下的一个名为default的文件。

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

最后,为了将HTTP请求默认重定向到HTTPS,您可以在文件顶部添加一个额外的服务器块。

默认情况下,文件位置位于/etc/nginx/sites-enabled/default

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

保存并关闭文件。如果您使用的是nano编辑器,请按Ctrl+X,然后在提示时按Y,最后按Enter

在重新启动Nginx之前,您可以使用nginx -t来验证您的配置。

sudo nginx -t

如果没有问题的话,重新启动Nginx以启用HTTPS上的SSL。

sudo systemctl restart nginx

通过HTTPS访问您的网站进行测试,例如https://example.com。您还需要尝试通过HTTP连接,例如http://example.com,以确保重定向正常工作。

在Apache上部署SSL证书

以下是手动在Apache上部署SSL证书的步骤。

使用nano或您喜欢的文本编辑器,打开默认的Apache虚拟主机文件进行编辑。

sudo nano /etc/apache2/sites-available/000-default.conf

请找到<VirtualHost>条目,并将其修改为使您的Web服务器在端口443上监听:

/etc/apache2/sites-available/000-default.conf是位于Apache2下的一个文件夹中的配置文件。

…
<VirtualHost *:443>
…

接下来,如果尚未存在,加入ServerName指令。

/etc/apache2/sites-available/000-default.conf可以改写为:/etc/apache2/sites-available/000-default.conf

…
ServerName example.com

然后添加以下行以指定您的证书和密钥路径。

/etc/apache2/sites-available/000-default.conf的中文简述是:/etc/apache2/sites-available/000-default.conf

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

目前,您的服务器已配置为仅监听HTTPS(端口443),因此HTTP请求(端口80)将不会被处理。要将HTTP请求重定向到HTTPS,请在文件顶部添加以下内容(替换两个地方的名称)。

/etc/apache2/sites-available/000-default.conf的中文本地化:默认的.conf文件位于/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
   ServerName example.com
   Redirect permanent / https://example.com/
</VirtualHost>
…

保存并关闭文件。如果您正在使用nano,请按Ctrl+X,然后在提示时按Y,然后按Enter

通过运行以下命令来启用Apache的SSL模块:

sudo a2enmod ssl

现在,重新启动Apache以加载新的配置并在HTTPS上启用TLS/SSL。

sudo systemctl restart apache2

通过HTTPS访问您的网站进行测试,例如https://example.com。您还可以尝试通过HTTP连接,例如http://example.com,以确保重定向正常工作。

结论

这是文章《如何从商业证书颁发机构安装SSL证书》的第4部分(共4部分)。

在本教程中,您学习了如何确定何时需要从商业CA(证书颁发机构)购买SSL证书,以及如何比较和对比现有选项。您还学会了如何配置Nginx或Apache以支持HTTPS,并如何调整它们的配置以用于生产环境。

接下来,您可能想了解其他SSL使用情况,例如在使用负载均衡器时如何配置SSL。

bannerAds