注意:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于云环境的值。
使用 OCI 证书在 Apache Web 服务器上设置、创建和安装内部 CA 证书
简介
在快速发展的云计算和数字安全世界中,对管理数字证书的强大而灵活的解决方案的需求从未如此重要。Oracle Cloud Infrastructure (OCI) 证书服务是一个强大而可靠的工具,旨在简化 Oracle Cloud 生态系统内证书生命周期管理的复杂任务。OCI 证书是一项用于创建和管理传输层安全 (Transport Layer Security,TLS) 证书的服务。通过此免费服务,组织可以创建专用证书颁发机构 (Certificate Authorities,CA) 层次结构和 TLS 证书,这些证书可以在客户租户中自动部署和续订,并与 OCI 负载平衡器、OCI API 网关、Web 应用防火墙等 OCI 服务集成。
在本教程中,我们将探讨 OCI 证书服务作为企业证书管理解决方案的利用情况。我们将深入研究管理员创建内部 CA 的过程,并指导服务器管理员为其 Apache Web 服务器生成证书签名请求 (Certificate Signing Requests,CSR)。此外,我们将介绍使用内部 CA 创建证书所涉及的步骤,并演示如何在 Apache Web 服务器上安装这些证书。
具有必要特权的管理员将创建 CA 以为内部 Web 服务器颁发内部证书。此外,管理员还将创建动态组并设置策略,以授予此动态组对 OCI 证书服务的访问权限。通过将实例添加到动态组并应用必要的策略,在该实例上运行的应用程序可以访问 OCI 证书服务,而无需用户身份证明或配置文件。
管理员与服务器管理员共享区间详细信息和证书颁发机构标识信息,特别是 Oracle Cloud 标识符 (OCID)。OCID 用作证书颁发机构的唯一标识符。使用此信息,服务器管理员可以继续在其系统上安装 Oracle Cloud Infrastructure 命令行界面 (OCI CLI)。安装后,服务器管理员使用 OCI CLI 从管理员以前创建的证书颁发机构请求证书。这种系统化方法可确保正确识别证书颁发机构,从而在 Oracle Cloud Infrastructure 环境中安全高效地颁发证书。
目标
- 内部证书颁发机构在 Apache Web 服务器上设置、创建和安装证书。
先决条件
-
OCI 用户必须具有证书和 OCI 计算所需的策略才能管理资源。有关所有服务的策略参考,请参见 Policy Reference 。
-
用于创建 CA 的 RSA 密钥以及指定为 Web 服务器的计算实例的可用性。有关更多信息,请参见 Create a vault master encryption key 。
注:
可以使用 OCI 控制台执行创建证书颁发机构、生成证书、管理 OCI IAM 策略等任务。但是,在本教程中使用了 CLI 命令。
OCI 管理员应执行任务 1 到 3,服务器管理员应执行任务 4 到 9。
任务 1:创建证书颁发机构
使用以下命令创建证书颁发机构,请参见 Root Certificate Authority 。
命令格式:
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>
注:主题是一种复杂类型,其值必须是有效的 JSON。该值可以作为命令行上的字符串提供,也可以使用
file://path/to/file语法作为文件传入。在本教程中,我们将遵循文件方法。
命令示例:
使用以下信息创建示例文件 subject.json。
{
"commonName": "INTERNAL-ROOTCA"
}
oci certs-mgmt certificate-authority create-root-ca-by-generating-config-details --compartment-id ocid1.compartment.oc1..aaaaaaaabcdefghij12abcdefgh78abcde --name INTERNAL-ROOTCA --subject file://subject.json --kms-key-id ocid1.key.oc1.iad.abcdefghijklm.abcdefghijklmnop12abcdiklmnop56abcdef
任务 2:创建动态组
使用以下命令创建动态组,请参见 Dynamic Group 。
命令格式:
oci iam dynamic-group create --compartment-id <Tenancy OCID> --description <description> --name <DG Name> --matching-rule <Matching Rule>
命令示例:
oci iam dynamic-group create --compartment-id ocid1.tenancy.oc1..aaaaaaaabbbbcdefgh12abcdabcdefghijkl --description Web-servers --name Web-servers-DG --matching-rule "instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaabcdefghij12abcde6abcdefghij78abcde'"
任务 3:创建必要的策略来授予此动态组对 OCI 证书服务的访问权限
使用以下命令创建 OCI IAM 策略,请参阅 OCI IAM 策略。
命令格式:
oci iam policy create --compartment-id <compartment_id> --description <description> --name <name> --statements file://statements.json
命令示例:
使用以下信息创建文件 statements.json。
[
"Allow dynamic-group Web-servers-DG to manage leaf-certificate-family in compartment chaitanyachintala",
"Allow dynamic-group Web-servers-DG to use certificate-authority-family in compartment chaitanyachintala"
]
oci iam policy create --compartment-id ocid1.compartment.oc1..aaaaaaaabcdefgh56abcdefghij78abcde --description Create-Certficate --name Cert-policies --statements file://statements.json
任务 4:在计算实例 (Apache Web Server) 上安装 OCI CLI
安装和配置 OCI Command Line Interface (CLI) 。
连接到计算实例后,运行以下命令在 Linux 实例上安装并验证 Python 和 OCI CLI 程序包。
sudo dnf -y install oraclelinux-developer-release-el8
sudo dnf install python36-oci-cli
任务 5:使用 Apache Web 服务器中的 OpenSSL 创建证书签名请求 (Certificate Signing Request,CSR)
-
更改目录。
cd /etc/pki/tls/private/ -
使用以下信息创建文件
examplecert.cnf以使用主题替代名称 (Subject Alternative Name,SAN) 指定证书参数。注: SAN 扩展允许将其他身份(例如域名或 IP 地址)附加到证书 subject.The 中,使用 SAN 扩展是 SSL 证书的标准做法,它正在取代通用名称的使用。
[req] distinguished_name = req_distinguished_name req_extensions = v3_req prompt = no [req_distinguished_name] C = US ST = Texas L = Texas O = Elpmaxe CN = www.example.com [v3_req] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = example.com IP.1 = 1.1.1.1 -
使用以下命令创建 CSR。
openssl req -out example.csr -newkey rsa:2048 -nodes -keyout example.key -config examplecert.cnf -
(可选)使用以下命令验证 CSR。
openssl req -noout -text -in example.csr
任务 6:使用 OCI 管理员创建的 CA 创建证书
-
使用以下命令将
example.csr文件的内容捕获到变量examplecsr中。examplecsr=$(cat example.csr) -
命令格式:
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..aaaaaaaabcdefghhij78abcde --csr-pem "$examplecsr" --issuer-certificate-authority-id ocid1.certificateauthority.oc1.iad.abcdefghi56abcdefghijklmnop --name example.com --auth instance_principal
注:复制创建的证书的 OCID。
任务 7:下载证书和证书链
注:以 root 用户身份运行以下命令。
用于下载证书和证书链的命令。
命令格式:
oci certificates certificate-bundle get --certificate-id <Certificate_OCID>
示例命令 - 证书:
oci certificates certificate-bundle get --certificate-id ocid1.certificate.oc1.iad.abcdefghijbcdefghijk --raw-output --query 'data."certificate-pem"' > certificate.crt --auth instance_principal
示例命令 - 证书链:
oci certificates certificate-bundle get --certificate-id ocid1.certificate.oc1.iad.abcdefghip56abcdefghijk --raw-output --query 'data."cert-chain-pem"' > certificate-chain.pem --auth instance_principal
任务 8:使用证书安装和配置 Apache Web 服务器
-
安装 httpd 软件包、适用于 Apache 的 HTTPS 附加组件及其依赖项。
sudo dnf install httpd sudo dnf install mod_ssl作为最佳做法,使用 HTTPS 和先前生成的 TLS 证书保护 Web 浏览器与 Apache 服务器之间的所有通信。
要更改 Web 服务器的根路径,请勿直接编辑
/etc/httpd/conf/httpd.conf文件。而是作为首选方法在/etc/httpd/conf.d目录中创建特定于站点的配置文件。在以下示例中,创建文件/etc/httpd/conf.d/example.com.conf以包含虚拟主机的配置。 -
通过在
/etc/httpd/conf.d/example.com.conf中添加以下信息来创建虚拟主机。Listen *:443 <VirtualHost *:443> ServerName example.com ServerAlias www.example.com SSLEngine on SSLCertificateFile /etc/pki/tls/private/certificate.crt SSLCertificateKeyFile /etc/pki/tls/private/example.key DocumentRoot /var/www/example.com/html/ ErrorLog /var/log/httpd/example.com_error.log CustomLog /var/log/httpd/example.com_access.log combined </VirtualHost> -
创建文档根文件夹。根文件夹托管 Apache 将提供给浏览器的网页。
sudo mkdir -p /var/www/example.com/html sudo echo "example.com" > /var/www/example.com/html/index.html sudo chown -R apache:apache /var/www/example.com/html -
重新启动 Apache 服务以加载新配置。
sudo systemctl restart httpd注:如果遇到错误“无法在同一 IP:port 上定义多个监听程序”,则注释文件
/etc/httpd/conf.d/ssl.conf中的行 Listen 443 https 。 -
配置防火墙。这些命令为 Apache HTTPS 服务启用防火墙端口 443 并重新加载默认防火墙服务。
sudo firewall-cmd --add-service=https --permanent sudo firewall-cmd --reload注:请确保与子网关联的安全列表以及与 VNIC 关联的安全组允许端口 443 上的通信。
任务 9:测试网页
-
Curl from Host(来自主机的 Curl):使用运行 Apache Web Server 的主机的 curl 命令测试连接。您将收到错误 curl failed to verify the validimacy of the server 。

-
笔记本电脑中的 Curl:从笔记本电脑或其他计算机中,使用 curl 检查与 Apache Web 服务器的连接。将 IP 地址或主机名替换为服务器的实际 IP 地址或主机名。您将收到相同的错误 curl failed to verify the validimacy of the server 。

-
Web 浏览器:在膝上型电脑上打开 Web 浏览器并使用
https://your-server-ip访问网页。检查浏览器可能显示的任何安全警告或错误。
所有错误都源于以下事实:在 Web 服务器上安装的证书不是由公共证书颁发机构颁发的,内部 CA 的根证书不在证书存储中。
-
安装证书链:将以前下载的证书链安装到客户机上的根可信颁发机构中。此步骤对于客户机识别和信任 Apache Web 服务器提供的证书至关重要。
-
使用有效的 TLS 证书访问网页:安装证书链后,使用 Web 浏览器重新访问网页。现在,您应该看到网页正在提供有效的 TLS 证书,以前遇到的任何安全警告或错误都应该解决。

通过执行以下步骤,您可以确保您的 Apache Web 服务器已正确配置了内部 CA 证书,并且客户端可以通过 HTTPS 安全地访问网页。
相关链接
确认
- 作者 - Chaitanya Chintala(云安全顾问)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Use OCI Certificates for Internal CA Setup, Creation, and Installation of certificates on Apache Web Server
F90568-01
January 2024
Copyright © 2024, Oracle and/or its affiliates.