LPI Linux 认证/维护 Web 服务器
(LPIC-2 版本 4.5)
权重 3
描述: 候选人应该能够配置 Web 服务器以提供 HTTPS。
关键知识领域
- SSL 配置文件、工具和实用程序。
- 为商业 CA 生成服务器私钥和 CSR。
- 生成自签名证书。
- 安装密钥和证书,包括中间 CA。
- 使用 SNI 配置虚拟主机。
- 了解虚拟主机和 SSL 使用方面的挑战。
- SSL 使用中的安全问题,禁用不安全的协议和密码。
术语和实用程序
- Apache2 配置文件
/etc/ssl/
,/etc/pki/
openssl
,CA.pl
- SSLEngine, SSLCertificateKeyFile, SSLCertificateFile
- SSLCACertificateFile, SSLCACertificatePath
- SSLProtocol, SSLCipherSuite, ServerTokens, ServerSignature, TraceEnable
Apache 是一个令人印象深刻且功能强大的应用程序。它不仅能够提供简单的(静态)HTTP 页面,这是一个(本质上)微不足道的任务。Apache 可以通过使用“虚拟主机”在单个物理机器上一个 IP 地址上托管多个网站(http://www.example.com 和 http://www.beispiel.de)使用一个 Apache 进程。Apache 也可以使用多个 IP 地址在同一台物理机器上存储不同的网站,这(不一定)需要不同的网络卡。这也由“虚拟主机”实现。
此外,Apache 可以使用非常复杂的方法来重定向查询。
对我来说,最重要的是使用 SSL(作为 OpenSSL)。SSL 可以为很多人做很多事情:它可以保护(加密)在 Web 客户端和 Web 服务器之间来回传递的内容。它还可以确保双方通信的身份,即服务器和客户端。
VirtualHost 部分包含仅适用于特定主机名或 IP 地址的指令。参见 [1] 和 [2]
OpenSSL(link) 是一套实现和处理符合传输层安全 (TLS) ??? 协议(link) 的证书(link) 的工具。
安全套接层 (SSL)(link) 或传输层安全 (TLS)(link)(3 版之后的 SSL 版本现在称为 TLS)使用公钥加密(link) 来保护在不安全且无法保护的互联网上的交易。与我所知的其他所有公钥加密方案一样,TLS 使用一个秘密的私钥和一个公开共享的公钥,称为证书。TLS 证书的特殊之处在于证书颁发机构 (CA)(link)。要使 TLS 证书被识别为有效,它必须由“证书颁发机构”进行(加密)签名。
简而言之,公钥加密的工作原理如下:有两个密钥,一个是所有人都可以使用的公钥,另一个是只有我才能看到的私钥。私钥通常也受一个非常强大的密码保护。
两个密钥都可以用于加密只有另一个密钥才能解密的数据。原则上,公钥和私钥之间没有区别!
另一方面,用私钥加密数据似乎毫无意义,因为互联网上的每个人已经或可以获取您的公钥并解密数据。但是,如果您使用私钥加密数据,则可以证明您拥有私钥。这样您就可以(加密地)签署数据。要签署数据,我们通常不会加密整个数据,而是一个(加密)哈希(link),因此我们可以证明数据的真实性,前提是我们非常小心地保管我们的私钥。密码只是一个额外的安全措施,以防私钥泄露到公共区域或丢失。
证书颁发机构使用其私钥来签署我们的公钥。然后它们被称为证书。就是这样!几乎。我们发送一个“证书签名请求”(稍后会详细介绍),其中包含您的身份声明以及不同数量的资金,CA 会尝试(取决于我们支付的金额)验证您的身份,如果成功,它将签署您的请求,最后将签署的证书发回给我们。但请记住,香港邮政(TM)(或任何其他 CA)能做的只是验证巴西身份。但现在问题是如何获取 CA 的证书……而诀窍就在这里:我们已经有了!大多数可以使用 TLS 证书的软件都包含一个受信任(这是一个神奇的词)CA 列表。任何由此类受信任的 CA(例如,由 StartSSL)签署的并使用其证书安装在我们机器上的新证书(例如,shop.example.com)也被视为受信任的。未签署的证书或由未知 CA 签署的证书将被视为“不受信任”,我们将会收到一个可怕的警告。
只要我们足够努力,几乎可以在互联网上使用 TLS 证书来保护任何不安全的服务。
- 网页浏览(HTTPS 而不是 HTTP)
- 发送邮件(SMTPS 而不是 SMTP)
- 接收邮件(IMAPS 而不是 IMAP/POP3S 而不是 POP3)
- 聊天(使用 TLS 的 IRC)
- VPN(OpenVPN)
它是如何工作的(针对网页浏览)?简化版
- 客户端连接到服务器
- 服务器发送证书
- 客户端检查证书的某些属性
- 证书绑定到我们连接到的服务器的完全合格主机名 (FQHN)。网页浏览器会检查服务器的 FQHN 与证书是否匹配,如果不匹配,则会生成错误。
- 证书需要由可信的 CA 签署,否则网页浏览器会生成错误。
- 证书的有效期有限,具体取决于我们支付的费用。网页浏览器会检查证书是否仍然“有效”,如果不是,则会生成错误。
- 我们的计算机上有一个无效证书列表。这些证书因各种原因被吊销:被盗用、存在错误、被盗等。如果服务器证书在该列表中,客户端软件会生成错误。
- 如果证书被认为有效(或如果接受无效证书,即使它无效),客户端会使用证书对随机值进行加密,并将其发送到服务器。
- 只有客户端(因为它生成了该随机值)和服务器(因为它可以解密该随机值)知道由客户端生成的随机值。
- 随机值会在两端生成一个对称密钥,并且任何进一步的双向通信都将使用此生成的密钥进行加密。(使用对称密钥是因为 CPU 更容易处理加密和解密。)
CA 根证书存储在我们的计算机上的许多不同位置。通常,每个使用 TLS 的软件都会自带一组可信 CA 列表。
- openssl:
/etc/ssl/certs
- firefox
- thunderbird
- claws-mail:
~/.claws-mail/certs/
另一方面,openssl
可以作为经典“明文”协议(比如所有互联网协议,例如 POP3)的 TLS 客户端。