如何从商业证书颁发机构安装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),无需您手动注册每一个子域名。

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

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

先决条件

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

  • A registered domain name. This tutorial will use example.com throughout. You can purchase a domain name from Namecheap, get one for free with Freenom, or use the domain registrar of your choice.
  • Access to one of the email addresses on your domain’s WHOIS record or to an “admin type” email address at the domain itself. Certificate authorities that issue SSL certificates will typically validate domain control by sending a validation email to one of the addresses on the domain’s WHOIS record, or to a generic admin email address at the domain itself. To be issued an Extended Validation certificate, you will also be required to provide the CA with paperwork to establish the legal identity of the website’s owner, among other things.
  • DNS records set up for your server. If you are using Silicon Cloud, please see our DNS documentation for details on how to add them.

本教程将根据《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: Used for a single domain, e.g. example.com. Note that additional subdomains, such as www.example.com, are not included
  • Wildcard: Used for a domain and any of its subdomains. For example, a wildcard certificate for *.example.com can also be used for www.example.com and store.example.com
  • Multiple Domain: Known as a SAN or UC certificate, these can be used with multiple domains and subdomains that are added to the Subject Alternative Name field. For example, a single multi-domain certificate could be used with example.com, www.example.com, and example.net

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

  • Domain Validation (DV): DV certificates are issued after the CA validates that the requestor owns or controls the domain in question
  • Organization Validation (OV): OV certificates can be issued only after the issuing CA validates the legal identity of the requestor
  • Extended Validation (EV): EV certificates can be issued only after the issuing CA validates the legal identity, among other things, of the requestor, according to a strict set of guidelines. The purpose of this type of certificate is to provide additional assurance of the legitimacy of your organization’s identity to your site’s visitors. EV certificates can be single or multiple domain, but not wildcard

附加功能

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

步骤2 – 生成CSR和私钥

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

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

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

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

 

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

例如:

Output

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*

 

Output

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服务器。

Output

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

 

Output

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发行版的操作类似。本教程还做出以下假设:

  • The private key, SSL certificate, and, if applicable, the CA’s intermediate certificates are located in a home directory, at /home/sammy
  • The private key is called example.com.key
  • The SSL certificate is called example.com.crt
  • The CA intermediate certificate(s) returned by your provider are in a file called intermediate.crt

Note

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

Nginx 反向代理服务器

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

如果你的CA返回的只是中间证书,你必须创建一个包含你的证书和CA的中间证书的单个“链接”证书文件。

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

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

 

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

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

 

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

以下是对“/etc/nginx/sites-enabled/default”的中文本地化释义:

默认情况下,/etc/nginx/sites-enabled/default

…
server {
    listen 443 ssl;
…

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

以下是对/etc/nginx/sites-enabled/default的本地化中文描述:

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来验证您的配置。

  1. sudo nginx -t

 

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

  1. sudo systemctl restart nginx

 

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

Apache就是指的美洲原住民阿帕切族。

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

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

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

 

请找到的条目,并将其修改为使您的 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模块:

  1. sudo a2enmod ssl

 

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

  1. sudo systemctl restart apache2

 

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

结论

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

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

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds