我不确定是我的问题还是文档有问题,Apache
但我认为这经常误导退出。
例子:
http://httpd.apache.org/docs/2.4/ssl/ssl_howto.html
您的 SSL 配置至少需要包含以下指令。
LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHost *:443>
ServerName www.example.com
SSLEngine on
SSLCertificateFile "/path/to/www.example.com.cert"
SSLCertificateKeyFile "/path/to/www.example.com.key"
</VirtualHost>
所以根据上面的内容,我假设该SSLEngine
指令是必须。
现在在 https://httpd.apache.org/docs/2.4/mod/mod_ssl.html
SSLEngine Directive
Description: SSL Engine Operation Switch
Syntax: SSLEngine on|off|optional
Default: SSLEngine off
Context: server config, virtual host
Status: Extension
Module: mod_ssl
This directive toggles the usage of the SSL/TLS Protocol Engine. This is should be used inside a <VirtualHost> section to enable SSL/TLS for a that virtual host. By default the SSL/TLS Protocol Engine is disabled for both the main server and all configured virtual hosts.
Example
<VirtualHost _default_:443>
SSLEngine on
#...
</VirtualHost>
In Apache 2.1 and later, SSLEngine can be set to optional. This enables support for RFC 2817, Upgrading to TLS Within HTTP/1.1. At this time no web browsers support RFC 2817.
特别是它所说的部分 - 默认情况下,主服务器和所有配置的虚拟主机都禁用 SSL/TLS 协议引擎。
首先,我不明白他们所说的 SSL/TLS 协议引擎的实际含义是什么。据我了解,要启用 SSL/TLS 支持,我们需要安装该mod_ssl
模块,因为默认情况下未安装该模块 - 这是嘿谈论的引擎吗?
其次,一旦mod_ssl
安装,httpd
不仅可以开始收听,80
而且443
还可以继续收听。
第三,当我查看ssl.conf
配置文件时,有以下行SSLEngine on
。 Apache 文档说主服务器配置和之前的任何内容(例如虚拟主机指令)被解析为一个 - 那么为什么我需要SSLEngine
在每个虚拟主机中使用该指令?
第四,我创建了两个虚拟主机,例如,并ServerName
为每个主机定义指令和 SSLCertificate 指令,以便每个主机都会根据SNI
浏览器发送的值以正确的证书进行响应,而且我做了不是在两个虚拟主机中包含 SSLEngine 指令,Web 内容将通过https
Apache 返回正确的 SSL 证书。
为什么文档说它是必需的,但没有它却可以工作?
期待您的评论!
附言。请记住我只是人类。我花了相当多的时间来阅读文档和复制品 - 如果我错过了一些东西,请道歉,这不是因为懒惰,有时我们可能会忽略就在我们眼前的简单想法。
答案1
我会尽力帮助:
1) SSL 协议引擎正是驱动 SSL 协议(又名 HTTPS)的引擎。该引擎由 mod_ssl 提供,但默认情况下未启用,因为这会消耗额外的资源。它与 HTTP 协议有很大不同,它需要自己的名称:HTTPS
2) 端口 443 的打开和 SSLEngine 的启用仅由于操作系统维护人员将该配置打包到 mod_ssl 包中而发生。通过直接从源代码构建和安装 Apache,默认行为如文档所述。
3) ssl.conf 文件是由您的发行版维护者提供的,Apache 和 Apache 文档对此一无所知,因此他们只是记录默认值。我不确定您的系统的内容是什么,但很可能您会将其包含到每个虚拟主机中,因为 Apache 文档指出 SSLEngine 应该在虚拟主机配置中使用。需要在每个虚拟主机中启用它,以免在不需要的地方消耗资源。
4) 如果它对你来说是这样的,那么很可能这是你的操作系统提供的另一种便利。 Apache 不知道每个操作系统如何在其包中配置 Apache,因此它们仅描述最基本的默认行为。您可以浏览您的发行版提供的所有 Apache 配置文件,看看它们如何影响 Apache 的行为,这样您可以学到很多东西。