注意:

使用 OCI 证书在 Nginx 服务器上颁发内部证书并托管受 TLS/SSL 保护的网站

简介

在本教程中,我们将介绍如何使用 Oracle Cloud Infrastructure (OCI) 证书在 Nginx 服务器上发布内部证书来托管传输层安全 (Transport Layer Security,TLS)/安全套接字层 (Secure Sockets Layer,SSL) 保护的网站。OCI 证书是一项用于创建和管理 TLS 证书的服务。通过该服务,组织可以创建专用证书颁发机构 (CA) 层次结构和 TLS 证书,这些层次结构和证书可以在客户租户中自动部署和续订,并与 OCI 负载平衡器和 OCI API 网关等 OCI 服务集成。我们还可以使用此服务为托管在 Nginx 上的内部 Web 服务器生成证书。

要在 Nginx 服务器上启用 TLS/SSL 加密,需要 TLS/SSL 证书。证书签名请求 (CSR) 是发送到 CA 以获取证书的请求。CSR 包含有关您的组织和要为其请求证书的域的信息。在颁发 TLS/SSL 证书之前,CA 会验证此信息。验证此信息可确保将证书颁发给域的合法所有者。创建 CSR 时,您还可以生成私钥。此私钥用于解密使用相应公钥加密的数据。安全地生成此密钥并保证其安全至关重要。

目标

先决条件

任务 1:在 OCI 计算实例上安装 OCI CLI

任务 2:在 OCI 中创建证书颁发机构 (Certificate Authority,CA)

使用 OCI 证书服务创建证书颁发机构 (Certificate Authority,CA),该服务将用于为我们的网站颁发内部证书。有关 CA 配置的更多信息,请参见 Creating a Certificate Authority

或者

使用 OCI CLI 创建 CA。使用 oci certs-mgmt certificate create-certificate-issued-by-internal-ca 命令和必需的参数创建根 CA。有关更多信息,请参见 create-certificate-issued-by-internal-ca

命令格式:

oci certs-mgmt certificate-authority create-root-ca-by-generating-config-details --compartment-id <compartment_OCID> --name <CA_display_name> --subject <CA_subject_information> --kms-key-id <Vault_encryption_key_OCID>

示例命令:

oci certs-mgmt certificate-authority create-root-ca-by-generating-config-details --compartment-id ocid1.compartment.oc1..aaaaaaaaxxx --name MyRootCA --subject file://subject.json --kms-key-id ocid1.key.oc1.iad.abcxxxxx

注:主题是一种复杂类型,其值必须是有效的 JSON。该值可以作为命令行上的字符串提供,也可以使用 file://path/to/file 语法作为文件传入。

示例 subject.json 文件

subject.json
{
  "commonName": "MyRootCA"
}

任务 3:使用 OpenSSL 创建证书签名请求 (Certificate Signing Request,CSR)

在 Nginx 服务器上创建 CSR,该服务器还将在同一服务器上创建私钥。这是推荐的方法,为我们提供了一种标准化的方法来发送 CA 在您的公钥上,以及一些标识您的公司和域名的信息。直接在 Nginx 服务器上生成 CSR 可在 TLS/SSL 证书颁发后无缝集成。

  1. 导航到 cd /etc/pki/tls/private/

  2. 创建一个名为 mywebsitecert.cnf 的文件以指定要为其请求证书的主题替代名称 (SAN) 等参数。

    注: SAN 扩展允许将其他身份(如域名或 IP 地址)附加到证书主题。SAN 扩展的使用是 SSL 证书的标准做法,它正在取代通用名称的使用。

    示例文件:

    [req]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
    prompt = no
    
    [req_distinguished_name]
    C = IN
    ST = Telangana
    L = Hyd
    O = OU
    CN = www.mywebsite.com
    
    [v3_req]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names
    
    [alt_names]
    DNS.1 = mywebsite.com
    IP.1 = 1.2.3.4
    
    
  3. 使用以下命令创建 CSR。

    您需要向 CA 提供 mywebsite.csr 文件才能获取 SSL 证书。他们将使用它为您的域生成 SSL 证书。它使用已通过 mywebsitecert.cnf 文件提供的配置。

    保持 private.key 文件的安全,因为它用于解密使用相应公钥加密的数据。

    openssl req -out mywebsite.csr -newkey rsa:4096 -nodes -keyout private.key -config mywebsitecert.cnf
    

任务 4:使用 CA 创建证书

要使用 OCI CLI 创建新证书,需要在 Nginx 服务器上安装证书的 .pem

  1. csr 文件的格式转换为 .pem 格式。

    openssl req -inform DER -in mywebsite.csr -out mywebsite.pem
    
  2. 运行以下命令以创建证书。

    命令格式:

    oci certs-mgmt certificate create-certificate-managed-externally-issued-by-internal-ca --compartment-id  <compartment_OCID>  --csr-pem <csr_pem> --issuer-certificate-authority-id <CA_OCID> --name <Certificate-name>
    

    示例命令:

    oci certs-mgmt certificate create-certificate-managed-externally-issued-by-internal-ca --compartment-id ocid1.compartment.oc1..aaaaaaaaxxx --csr-pem mywebsite.pem --issuer-certificate-authority-id ocid1.certificateauthority.oc1.iad.aaaxxxx
    --name mywebsite.com
    

任务 5:下载证书和证书链

可以直接从 OCI 控制台获取证书 pem 文件,导航到身份和安全证书证书查看内容,然后下载 certificate-pemcertificate-chain-pem 的内容。

通过组合两个文件中的内容(顶部的 certificate-pem 和文件底部的 certificate-chain-pem)来创建单个文件。您可以将其命名为 ca_certificate.pem

或者

您还可以使用以下命令从 OCI CLI 提取证书。

命令格式:

oci certificates certificate-bundle get --certificate-id <Certificate_OCID> > certificate.crt

注:复制证书的 Oracle Cloud 标识符 (OCID)。

任务 6:使用证书安装和配置 Nginx 服务器

  1. 在计算实例上安装 Nginx。有关详细信息,请参阅安装 Nginx

  2. 打开 Web 浏览器并使用 https://your-server-ip 访问该网页。检查浏览器可能显示的任何安全警告或错误。

    图像

    它显示一个安全警告,因此我们需要在 Nginx 服务器上安装证书并修改 conf 文件。

  3. 将下载的 certificate.pemca_certificate.pem 文件从 OCI 控制台或 OCI CLI 复制到 Nginx 服务器。

  4. 通过编辑 Nginx 服务器的配置文件(位于 /etc/nginx/conf.d)来配置 Nginx 服务器。

    图像

  5. 重新启动 Nginx 服务器。

任务 7:测试 HTTPS 是否正在工作

我们已将 CA 证书 (ca_certificate.pem) 放置在本地计算机的可信根证书颁发机构文件夹中,将证书存储在用于访问此网站的客户端计算机上。这是因为 OCI 证书创建的 CA 是专用 CA,因此浏览器不信任这些 CA,因此我们需要在所有尝试访问网站的本地计算机上添加根 CA 和中间 CA(如果使用)。

打开 Web 浏览器并使用 https://your-server-ip 访问该网页。现在,您应该看到网页正在提供有效的 TLS 证书,以前遇到的任何安全警告或错误都应该得到解决。

图像

图像

通过执行以下任务,您可以确保您的 Nginx 服务器已正确配置了内部 CA 证书,并且客户端可以通过 HTTPS 安全地访问网页。

确认

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心