Certificate Authority 缩写为CA,是颁发数字证书的实体。数字证书通过证书的CN(通用名称)证明公钥的所有权。 通常,第三方应用都会信任由受信的证书颁发机构授予网站已经带有其签名的SSL证书。
在 CentOS 7 中配置 CA 证书服务器是简单而又直接的操作,本文不仅讲解如何配置 CA 服务器,同时还要演示如何在Apache 服务器中使用该服务器颁发的 SSL 证书,最后将根 CA 证书添加到客户端的可信 CA 存储中。
需要注意的是,本文侧重于如何部署和配置 CA 服务器,而并不讲解信息如何使用证书加密和解密。
1] 实验环境
配置和使用 CA 证书服务器,我们搭建如下实验环境:
Hostname | IP Address | Operating System | 主机用途 |
---|---|---|---|
ca.example.com | 172.16.200.1 | CentOS 7 | CA 证书服务器 |
web.example.com | 172.16.200.2 | CentOS 7 | Apache HTTP 服务器 |
client.example.com | 172.16.200.3 | CentOS 7 | 客户机 |
2] CentOS 7 系统配置 CA 服务器
要创建 CA 服务器,需要使用 openssl 软件包,因为 openssl 提供了创建 SSL 证书和密钥所需的命令。默认情况下,即便是 CentOS 7 最小化安装,openssl 软件包也会被一同安装,可以使用如下命令查看系统是否已经安装了 openssl软件包:
# yum install -y openssl
如果没有安装,则会安装该软件包,如果系统已经安装,则会提示。
为了实现公共加密,我们首先需要一个稍后用于生成 CA 证书的私钥,使用如下命令创建:
# cd /etc/pki/CA/private/ # openssl genrsa -aes128 -out myCA.key 2048
这里,我们使用 RSA 算法生成一个私钥文件”myCA.key”,密钥长度使用2048 bits,相对较大,以提高安全性。
图.1 使用 openssl 命令生成私钥
在生成私钥时会提示输入密码短语,虽然,我们可以生成没有密码短语的私钥。 但是,强烈建议生成私钥时设置密码短语,因为它可以在传输或备份私钥时提升安全性。
现在,使用已经生成的私钥文件”myCA.key”来创建 CA 证书服务器:
# openssl req -new -x509 -days 1825 \ -key /etc/pki/CA/private/myCA.key \ -out /etc/pki/CA/certs/myCA.crt
填入必要的信息后,openssl 命令就会生成一个证书文件”myCA.crt”:
有了这个证书文件”myCA.crt”,就表示我们的 CA 服务器已经准备就绪了。
2] 配置Apache HTTP 服务器使用 SSL 证书
首先,使用如下命令安装 Apache 服务器并将其设置为可用:
# yum instal -y httpd # systemctl start httpd # systemctl enable httpd # firewall-cmd --add-service=http --zone=public --permanent # firewall-cmd --add-service=https --zone=public --permanent # firewall-cmd --reload
安装完成后,通过浏览器访问一下Web服务器,方便起见,我们已经把主面内容做了修改:
图.3 Apache服务器运行测试
我们想让这个网站可以使用证书进行 SSL 加密传输,要达到此目的,需要先安装 Apache 的 ssl 模块:
# yum install -y mod_ssl
安装”mod_ssl”模块时,默认会在”/etc/httpd/conf.d“目录添加一个 SSL 配置文件”ssl.conf”。我们可以修改”ssl.conf”来为网站添加SSL证书。 但首先我们必须为我们的网站获取SSL证书,在此服务器上安装openssl,因为我们要用它来生成私钥和CSR(证书签名请求)。
为服务器 web.example.com 生成私钥,使用如下命令:
# openssl genrsa -out /etc/pki/tls/private/web.key 1024 # openssl req -new -key /etc/pki/tls/private/web.key \ -out /etc/pki/tls/web.csr
首先,我们使用RSA密钥算法生成了一个私钥,密钥大小为1024 bits。这次生成私钥时,我们没有使用密码保护,因为如果我们设置一个密码短语,那么无论何时我们启动 httpd.service 都会要求输入密码。
之后,我们用新生成的私钥为网站生成CSR(证书签名请求)。
有了这个 CSR 文件,我们就可以通过 CA 服务器为其进行数字签名。首先在 Web 服务器使用以下命令将CSR 文件拷贝至 CA服务器:
# scp /etc/pki/tls/web.csr root@172.16.200.1:~/web.csr
图.4 将CSR文件传递给CA服务器
文件传送成功后,就可以在 CA 服务器上进行数字签名了。在 CA 服务器上执行如下命令对签名请求进行数字签名:
# openssl x509 -req -in web.csr \ -CA /etc/pki/CA/certs/myCA.crt \ -CAkey /etc/pki/CA/private/myCA.key \ -CAcreateserial \ -out web.crt \ -days 365
图.5 CA 服务器对签名请求文件进行数字签名并生成证书
可以看到,使用以上命令已经生成了 Web 服务器的证书文件”web.crt”,现在将该文件通过如下命令回传至Web服务器:
# scp web.crt root@172.16.200.2:/etc/pki/tls/certs/web.crt
现在,修改 Web 服务器的”ssl.conf”文件,指定证书文件和私钥文件:
SSLCertificateFile /etc/pki/tls/certs/web.crt SSLCertificateKeyFile /etc/pki/tls/private/web.key
重新启动 Apache 服务器后,网站就已经支持HTTPS协议了。
3] 在 CentOS 7 客户端将 CA 服务器证书添加信任
如果我们此时使用浏览器访问”https://web.example.com”,浏览器就会提示证书不受信任,因为网站的证书使用的是自己搭建的证书服务器,当然不被信任,但这并不影响浏览器同服务器间数据的加密传输。
通过浏览器的相应按钮,可以查看证书的详细信息:
图.6 测试网站的 CA 证书详细信息
可以看到,证书的基本信息与我们预想的一致,想要信任该证书,点击安装证书即可。
对于 CentOS 7 系统,同样可以手动将证书添加至本地信任。
为了验证本地证书是否存储成功,我们先安装一个图形化浏览器”elinks”:
# yum install -y elinks
然后,使用 elinks 浏览”https://web.example.com”,就会见到如下的错误信息,提示 SSL 证书错误:
图.7 使用elinks测试Web服务器 SSL 证书
出现这个错误也不用担心,因为我们还没有配置任何东西。 实际上,由于网站的 CA 证书未包含在client.example.com的本地ca-trust存储中,因此会引发此SSL错误。
可以通过将CA证书添加到本地ca-trust存储来安装CA证书。 首先,我们从自建的 CA 服务器ca.example.com获取CA证书,然后再更新本地信任证书存储:
# cd /etc/pki/ca-trust/source/anchors/ # scp root@172.16.200.1:/etc/pki/CA/certs/myCA.crt . # update-ca-trust
更新好本地存储后,重新启动一下客户机,然后再通过 elinks 浏览”https://web.example.com”,就会正常显示网页内容了,说明 CA 工作正常。
图.8 使用elinks成功访问 ssl 证书网站
以上就是在CentOS 7 系统配置 CA 服务器的全部内容,正如之前所说,配置服务器并不复杂,而本教程也演示了证书签发和数字签名的大致过程,希望有所启发。