如何从商业证书颁发机构安装 SSL 证书

介绍

本教程将向您展示如何从受信任的商业证书管理局(CA)获取和安装SSL证书。SSL证书允许网络服务器加密其流量,并为访问者提供验证服务器身份的机制。

在2010年代中期之前,许多较小的网站并不总是使用SSL或HTTPS。

然而,Let’s Encrypt 的证书有一些限制,它们每 3 个月都到期,通常需要您安装一个运行 自动更新脚本,并且在这种情况下无法使用,Let’s Encrypt 也不会提供 扩展验证证书,以验证您的网站存在的合法所有权,或 Wildcard 证书,这些证书将自动匹配您的网站(如 shop.example.com)的每个潜在子域,而无需手动注册它们。

对于大多数用户来说,这不会是显著的局限性。让我们加密是许多个人和商业网站的受欢迎选择,但是,如果您有特定企业软件要求,或非常大的商业运营,您应该考虑从商业CA购买证书。

本教程涵盖如何从可信的证书授权机构选择和部署 SSL 证书. 您获得 SSL 证书后,本教程将涵盖在 Nginx 和 Apache 网络服务器上安装它。

前提条件

有几个先决条件来尝试从商业 CA 获得 SSL 证书:

您可以从 Namecheap购买域名,通过 Freenom免费获取域名,或使用您所选择的域名注册机构使用本教程。

  • 访问您域名WHOIS记录上的电子邮件地址之一或域名本身的管理员类型电子邮件地址。发放SSL证书的证书机构通常会通过发送验证电子邮件到域名WHOIS记录上的地址之一或域名本身的通用管理电子邮件地址来验证域名控制, 为了获得扩展验证证,您还将被要求提供CA文件来确认网站所有者的合法身份, 除此之外。
  • DNS记录为您设置为您的服务器。如果您正在使用数字海洋,请

本教程将为 Ubuntu 22.04 服务器提供配置说明,通过遵循此 Ubuntu 22.04 初始服务器设置 教程,包括一个 sudo 启用的非root用户和防火墙。

您还应该安装一个 Web 服务器,如 Nginx 或 Apache,以下是 如何在 Ubuntu 22.04 上安装 Nginx如何在 Ubuntu 22.04 上安装 Apache Web Server. 请确保您有 服务器块(或 Apache 虚拟主机)为您的域。

步骤1 - 选择您的证书授权机构

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

根证书计划会员

最关键的是,您选择的CA是最常用的操作系统和网页浏览器的根证书程序的成员,即它是可信的CA,它的根证书是由常见的浏览器和其他软件信任的。

您会遇到的大多数商业CAs将是常见的 root CA程序的成员,但在购买证书之前检查不会伤害,例如,苹果发布其(信赖的SSL根证书清单)(https://support.apple.com/en-us/HT209143)。

证书类型

确保您选择提供您需要的证书类型的CA。许多CA在各种名称和定价结构下提供这些证书类型的变异。

  • 单域:用于单个域名,例如 example.com. 请注意,不包括 www.example.com 等附加子域名
  • Wildcard:用于域名和其任何子域名,例如,用于 *.example.com 的 wildcard 证书也可以用于 www.example.comstore.example.com
  • **多域名: 被称为 SAN 或 UC 证书,这些证书可以用于多个域名和子域名,这些证书被添加到主题替代名称字段。

除了上述证书类型外,CAs提供的不同级别的验证:

  • Domain Validation (DV): DV 证书在 CA 验证请求者在 question
  • **Organization Validation (OV)**中拥有或控制该域后发行:OV 证书只能在发行 CA 验证请求者
  • 的合法身份后发行:EV 证书只能在发行 CA 验证请求者的合法身份后发行,包括根据严格的准则。

附加特性

许多CAs提供大量的奖金功能,使他们与其他发行SSL证书的供应商区分开来。 其中一些功能最终可以为您节省资金,所以在购买之前,您必须对您的需求进行衡量。 值得注意的功能包括免费的证书再发行或一个单一的域价证书,该证书适用于‘www.‘和域名,例如‘www.example.com’和一个SAN的‘example.com’

第2步:生成CSR和私钥

在您整理了先决条件并知道您需要的证书类型之后,是时候生成证书签名请求(CSR)和私钥了。

如果您计划将Apache HTTP 或 Nginx 作为您的 Web 服务器,您可以使用openssl命令在您的 Web 服务器上生成您的私钥和 CSR。

要生成名为example.com.key的私钥和名为example.com.csr的 CSR,请运行此命令(以您的域名代替example.com):

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

在此时,您将被要求在您的证书请求中包含几个信息行。最重要的部分是共同名称字段,该字段应与您想要使用证书的名称匹配,例如example.com,www.example.com,或(对于一张野生卡证书请求)*.example.com。如果您计划获得OV或EV证书,请确保所有其他字段准确反映您的组织或业务细节。

例如:

 1[secondary_label Output]
 2Country Name (2 letter code) [AU]:US
 3State or Province Name (full name) [Some-State]:New York
 4Locality Name (eg, city) []:New York
 5Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
 6Organizational Unit Name (eg, section) []:
 7Common Name (e.g. server FQDN or YOUR name) []:example.com
 8Email Address []:[email protected]
 9
10Please enter the following 'extra' attributes
11to be sent with your certificate request
12A challenge password []:
13An optional company name []:

这将生成一个 .key.csr 文件. .key 文件是您的私钥,应该保持安全。 .csr 文件是您将发送给 CA 要求您的 SSL 证书的文件。

1ls example.com*
1[secondary_label Output]
2example.com.csr example.com.key

当您向 CA 提交证书请求时,您需要复制和粘贴 CSR。

1cat example.com.csr

现在你已经准备好从CA购买证书了。

步骤3 – 购买和获得证书

有许多商业CA提供商,你可以比较和对比最适合自己的设置的选项。例如,Namecheap作为SSL证书经销商,并在过去改变了上游CA提供商,以提供最佳的价值。

Namecheap SSL Offerings

选择后,您需要上传您在上一步中生成的 CSR. 您的 CA 提供商也可能有一个批准步骤,该步骤将向您的域 WHOIS 记录中的地址发送验证请求电子邮件或您正在获得证书的域的 administrator 类型地址。

批准证书后,该证书将发送电子邮件给所命名的管理员. 复制并将其存储到您生成的私钥和CSR的位置的服务器上。

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

步骤 4 – 更新您的防火墙以允许 HTTPS

如果您已启用ufw防火墙,如我们的Ubuntu 22.04安装指南建议,则需要调整设置以允许HTTPS流量。

您可以通过键入查看当前设置:

1sudo ufw status

如果您收到只包含Nginx HTTPApache的输出,则仅允许 HTTP 流量到 Web 服务器:

1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere                  
7Nginx HTTP ALLOW Anywhere                  
8OpenSSH (v6)               ALLOW Anywhere (v6)             
9Nginx HTTP (v6)            ALLOW Anywhere (v6)

要进一步允许 HTTPS 流量,请允许Nginx FullApache Full配置文件,并删除冗余的 HTTP 配置文件允许:

1sudo ufw allow 'Nginx Full'
2sudo ufw delete allow 'Nginx HTTP'

这应该产生这样的结果:

1sudo ufw status
1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere
7Nginx Full ALLOW Anywhere
8OpenSSH (v6)               ALLOW Anywhere (v6)
9Nginx Full (v6)            ALLOW Anywhere (v6)

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

步骤 5 – 在您的服务器上安装证书

在从您选择的 CA 获得证书后,您需要在您的 Web 服务器上安装该证书,这包括将一些与 SSL 相关的行添加到您的 Web 服务器软件配置中。

本教程将涵盖在 Ubuntu 22.04 上配置 Nginx 和 Apache,但大多数现代 Linux 味道将以类似的方式工作。

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

<$>[注] **注:**在生产环境中,这些文件应该存储在只有Web服务器流程(通常是root)可以访问的地方,而私钥应该保持安全。

Nginx 的

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

如果您的 CA 只返回了一个中间证书,则必须创建一个单一的证书文件,其中包含您的证书和 CA 的中间证书。

假设您的证书文件名为example.com.crt,您可以使用cat命令将文件附加在一起,以创建名为example.com.chained.crt的合并文件:

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

使用nano或您最喜欢的文本编辑器,打开默认的 Nginx 服务器封锁文件进行编辑:

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

查找倾听指令,并将其修改为倾听443 ssl:

1[label /etc/nginx/sites-enabled/default]
23server {
4    listen 443 ssl;
5

接下来,在相同的服务器块中找到server_name指令,并确保其值匹配您的证书的通用名称。

1[label /etc/nginx/sites-enabled/default]
23    server_name example.com;
4    ssl_certificate /home/sammy/example.com.chained.crt;
5    ssl_certificate_key /home/sammy/example.com.key;
6

若要只允许最安全的 SSL 协议和加密,请将下列行添加到文件中:

1[label /etc/nginx/sites-enabled/default]
23    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
4    ssl_prefer_server_ciphers on;
5    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
6

最后,要默认地将HTTP请求重定向到HTTPS,您可以在文件顶部添加额外的服务器块:

1[label /etc/nginx/sites-enabled/default]
2server {
3    listen 80;
4    server_name example.com;
5    rewrite ^/(.*) https://example.com/$1 permanent;
6}
7

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

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

1sudo nginx -t

如果没有任何问题,请重新启动 Nginx 以启用 SSL over HTTPS:

1sudo systemctl restart nginx

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

阿帕奇

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

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

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

找到<VirtualHost *:80>条目,并修改它,以便您的 Web 服务器在端口443上聆听:

1[label /etc/apache2/sites-available/000-default.conf]
23<VirtualHost *:443>
4

接下来,添加ServerName指令,如果它还不存在:

1[label /etc/apache2/sites-available/000-default.conf]
23ServerName example.com
4

然后添加以下行来指定您的证书和关键路径:

1[label /etc/apache2/sites-available/000-default.conf]
23SSLEngine on
4SSLCertificateFile /home/sammy/example.com.crt
5SSLCertificateKeyFile /home/sammy/example.com.key
6SSLCACertificateFile /home/sammy/intermediate.crt
7

在此时,您的服务器已配置为只收听 HTTPS(端口443),因此不会收到 HTTP(端口80)的请求. 若要将 HTTP 请求重定向到 HTTPS,请将下列内容添加到文件的顶部(取代两个位置的名称):

1[label /etc/apache2/sites-available/000-default.conf]
2<VirtualHost *:80>
3   ServerName example.com
4   Redirect permanent / https://example.com/
5</VirtualHost>
6

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

启用 Apache SSL 模块,运行此命令:

1sudo a2enmod ssl

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

1sudo systemctl restart apache2

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

结论

在本教程中,您了解了如何确定何时需要从商业 CA 购买 SSL 证书,以及如何比较和对比可用的选项,您还了解了如何配置 Nginx 或 Apache for HTTPS 支持,以及如何调整其配置用于生产。

接下来,您可能想阅读有关 其他SSL使用案例,例如当使用负载平衡器时。

Published At
Categories with 技术
comments powered by Disqus