ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# SSL/TLS高强度加密:兼容性 > 所有PC都是兼容的。但是其中一些比另一些更兼容。 > > -- <cite class="calibre63">无名氏</cite> 本文讨论对其他SSL方案的向下兼容性。mod_ssl并不是Apache唯一存在的SSL方案,另外还有四种主要的产品:Ben Laurie的免费的[Apache-SSL](http://www.apache-ssl.org/)(出现在1998年,与mod_ssl同源),RedHat商业化的[Secure Web Server](http://www.redhat.com/products/product-details.phtml?id=rhsa)(基于mod_ssl),Covalent商业化的[Raven SSL Module](http://raven.covalent.net/)(同样基于mod_ssl)和C2Net的商业化产品[Stronghold](http://www.c2.net/products/stronghold/)(直到Stringhold2.x都基于一个不同的演化分支Sioux,从Stronghold3.x起基于mod_ssl)。 使用mod_ssl的原因是,mod_ssl几乎提供了在大多数情况下能够兼容其他方案的功能的超集。事实上,兼容性包括三个方面:配置指令、环境变量和自定义日志功能。 ## 配置指令 为了兼容SSL方案的配置指令,我们做了一个简单的对应:有直接对应的指令则简单对应,没有直接对应的指令则会在日志文件中产生警告信息。[表1](#calibre_link-111)列出已实现对应的指令。目前仅对Apache-SSL1.x和mod_ssl2.0.x有完整的向下兼容支持,而仅支持Sioux1.x和Stronghold2.x的一部分,由于其接口中的特殊功能mod_ssl目前尚不支持。 ### 表1: 配置指令的对应 | 旧指令 | mod_ssl指令 | 说明 | | --- | --- | | --- | --- | --- | | Apache-SSL 1.x & mod_ssl 2.0.x 兼容性: | | --- | | `SSLEnable` | `SSLEngine on` | 已强化 | | `SSLDisable` | `SSLEngine off` | 已强化 | | `SSLLogFile` _file_ | `SSLLog` _file_ | 已强化 | | `SSLRequiredCiphers` _spec_ | `SSLCipherSuite` _spec_ | 被更名 | | `SSLRequireCipher` _c1_ ... | `SSLRequire %{SSL_CIPHER} in {"`_c1_`", ...}` | 无显著改变 | | `SSLBanCipher` _c1_ ... | `SSLRequire not (%{SSL_CIPHER} in {"`_c1_`", ...})` | 无显著改变 | | `SSLFakeBasicAuth` | `SSLOptions +FakeBasicAuth` | 被合并 | | `SSLCacheServerPath` _dir_ | - | 已废除 | | `SSLCacheServerPort` _integer_ | - | 已废除 | | Apache-SSL 1.x 兼容性: | | --- | | `SSLExportClientCertificates` | `SSLOptions +ExportCertData` | 被合并 | | `SSLCacheServerRunDir` _dir_ | - | 不再支持 | | Sioux 1.x 兼容性: | | --- | | `SSL_CertFile` _file_ | `SSLCertificateFile` _file_ | 被更名 | | `SSL_KeyFile` _file_ | `SSLCertificateKeyFile` _file_ | 被更名 | | `SSL_CipherSuite` _arg_ | `SSLCipherSuite` _arg_ | 被更名 | | `SSL_X509VerifyDir` _arg_ | `SSLCACertificatePath` _arg_ | 被更名 | | `SSL_Log` _file_ | `SSLLogFile` _file_ | 被更名 | | `SSL_Connect` _flag_ | `SSLEngine` _flag_ | 被更名 | | `SSL_ClientAuth` _arg_ | `SSLVerifyClient` _arg_ | 被更名 | | `SSL_X509VerifyDepth` _arg_ | `SSLVerifyDepth` _arg_ | 被更名 | | `SSL_FetchKeyPhraseFrom` _arg_ | - | 没有直接的对应;使用:SSLPassPhraseDialog | | `SSL_SessionDir` _dir_ | - | 没有直接的对应;使用:SSLSessionCache | | `SSL_Require` _expr_ | - | 没有直接的对应;使用:SSLRequire | | `SSL_CertFileType` _arg_ | - | 不再支持 | | `SSL_KeyFileType` _arg_ | - | 不再支持 | | `SSL_X509VerifyPolicy` _arg_ | - | 不再支持 | | `SSL_LogX509Attributes` _arg_ | - | 不再支持 | | Stronghold 2.x 兼容性: | | --- | | `StrongholdAccelerator` _dir_ | - | 不再支持 | | `StrongholdKey` _dir_ | - | 不再支持 | | `StrongholdLicenseFile` _dir_ | - | 不再支持 | | `SSLFlag` _flag_ | `SSLEngine` _flag_ | 被更名 | | `SSLSessionLockFile` _file_ | `SSLMutex` _file_ | 被更名 | | `SSLCipherList` _spec_ | `SSLCipherSuite` _spec_ | 被更名 | | `RequireSSL` | `SSLRequireSSL` | 被更名 | | `SSLErrorFile` _file_ | - | 不再支持 | | `SSLRoot` _dir_ | - | 不再支持 | | `SSL_CertificateLogDir` _dir_ | - | 不再支持 | | `AuthCertDir` _dir_ | - | 不再支持 | | `SSL_Group` _name_ | - | 不再支持 | | `SSLProxyMachineCertPath` _dir_ | - | 不再支持 | | `SSLProxyMachineCertFile` _file_ | - | 不再支持 | | `SSLProxyCACertificatePath` _dir_ | - | 不再支持 | | `SSLProxyCACertificateFile` _file_ | - | 不再支持 | | `SSLProxyVerifyDepth` _number_ | - | 不再支持 | | `SSLProxyCipherList` _spec_ | - | 不再支持 | ## 环境变量 当使用"`SSLOptions +CompatEnvVars`"时,会产生附加的、对应于现存官方mod_ssl变量的环境变量。[表2](#calibre_link-112)列出了已实现的变量的演变。 ### 表2: 环境变量的演变 | 旧变量 | mod_ssl 变量 | 说明 | | --- | --- | | --- | --- | --- | | `SSL_PROTOCOL_VERSION` | `SSL_PROTOCOL` | 被更名 | | `SSLEAY_VERSION` | `SSL_VERSION_LIBRARY` | 被更名 | | `HTTPS_SECRETKEYSIZE` | `SSL_CIPHER_USEKEYSIZE` | 被更名 | | `HTTPS_KEYSIZE` | `SSL_CIPHER_ALGKEYSIZE` | 被更名 | | `HTTPS_CIPHER` | `SSL_CIPHER` | 被更名 | | `HTTPS_EXPORT` | `SSL_CIPHER_EXPORT` | 被更名 | | `SSL_SERVER_KEY_SIZE` | `SSL_CIPHER_ALGKEYSIZE` | 被更名 | | `SSL_SERVER_CERTIFICATE` | `SSL_SERVER_CERT` | 被更名 | | `SSL_SERVER_CERT_START` | `SSL_SERVER_V_START` | 被更名 | | `SSL_SERVER_CERT_END` | `SSL_SERVER_V_END` | 被更名 | | `SSL_SERVER_CERT_SERIAL` | `SSL_SERVER_M_SERIAL` | 被更名 | | `SSL_SERVER_SIGNATURE_ALGORITHM` | `SSL_SERVER_A_SIG` | 被更名 | | `SSL_SERVER_DN` | `SSL_SERVER_S_DN` | 被更名 | | `SSL_SERVER_CN` | `SSL_SERVER_S_DN_CN` | 被更名 | | `SSL_SERVER_EMAIL` | `SSL_SERVER_S_DN_Email` | 被更名 | | `SSL_SERVER_O` | `SSL_SERVER_S_DN_O` | 被更名 | | `SSL_SERVER_OU` | `SSL_SERVER_S_DN_OU` | 被更名 | | `SSL_SERVER_C` | `SSL_SERVER_S_DN_C` | 被更名 | | `SSL_SERVER_SP` | `SSL_SERVER_S_DN_SP` | 被更名 | | `SSL_SERVER_L` | `SSL_SERVER_S_DN_L` | 被更名 | | `SSL_SERVER_IDN` | `SSL_SERVER_I_DN` | 被更名 | | `SSL_SERVER_ICN` | `SSL_SERVER_I_DN_CN` | 被更名 | | `SSL_SERVER_IEMAIL` | `SSL_SERVER_I_DN_Email` | 被更名 | | `SSL_SERVER_IO` | `SSL_SERVER_I_DN_O` | 被更名 | | `SSL_SERVER_IOU` | `SSL_SERVER_I_DN_OU` | 被更名 | | `SSL_SERVER_IC` | `SSL_SERVER_I_DN_C` | 被更名 | | `SSL_SERVER_ISP` | `SSL_SERVER_I_DN_SP` | 被更名 | | `SSL_SERVER_IL` | `SSL_SERVER_I_DN_L` | 被更名 | | `SSL_CLIENT_CERTIFICATE` | `SSL_CLIENT_CERT` | 被更名 | | `SSL_CLIENT_CERT_START` | `SSL_CLIENT_V_START` | 被更名 | | `SSL_CLIENT_CERT_END` | `SSL_CLIENT_V_END` | 被更名 | | `SSL_CLIENT_CERT_SERIAL` | `SSL_CLIENT_M_SERIAL` | 被更名 | | `SSL_CLIENT_SIGNATURE_ALGORITHM` | `SSL_CLIENT_A_SIG` | 被更名 | | `SSL_CLIENT_DN` | `SSL_CLIENT_S_DN` | 被更名 | | `SSL_CLIENT_CN` | `SSL_CLIENT_S_DN_CN` | 被更名 | | `SSL_CLIENT_EMAIL` | `SSL_CLIENT_S_DN_Email` | 被更名 | | `SSL_CLIENT_O` | `SSL_CLIENT_S_DN_O` | 被更名 | | `SSL_CLIENT_OU` | `SSL_CLIENT_S_DN_OU` | 被更名 | | `SSL_CLIENT_C` | `SSL_CLIENT_S_DN_C` | 被更名 | | `SSL_CLIENT_SP` | `SSL_CLIENT_S_DN_SP` | 被更名 | | `SSL_CLIENT_L` | `SSL_CLIENT_S_DN_L` | 被更名 | | `SSL_CLIENT_IDN` | `SSL_CLIENT_I_DN` | 被更名 | | `SSL_CLIENT_ICN` | `SSL_CLIENT_I_DN_CN` | 被更名 | | `SSL_CLIENT_IEMAIL` | `SSL_CLIENT_I_DN_Email` | 被更名 | | `SSL_CLIENT_IO` | `SSL_CLIENT_I_DN_O` | 被更名 | | `SSL_CLIENT_IOU` | `SSL_CLIENT_I_DN_OU` | 被更名 | | `SSL_CLIENT_IC` | `SSL_CLIENT_I_DN_C` | 被更名 | | `SSL_CLIENT_ISP` | `SSL_CLIENT_I_DN_SP` | 被更名 | | `SSL_CLIENT_IL` | `SSL_CLIENT_I_DN_L` | 被更名 | | `SSL_EXPORT` | `SSL_CIPHER_EXPORT` | 被更名 | | `SSL_KEYSIZE` | `SSL_CIPHER_ALGKEYSIZE` | 被更名 | | `SSL_SECKEYSIZE` | `SSL_CIPHER_USEKEYSIZE` | 被更名 | | `SSL_SSLEAY_VERSION` | `SSL_VERSION_LIBRARY` | 被更名 | | `SSL_STRONG_CRYPTO` | `-` | mod_ssl不支持 | | `SSL_SERVER_KEY_EXP` | `-` | mod_ssl不支持 | | `SSL_SERVER_KEY_ALGORITHM` | `-` | mod_ssl不支持 | | `SSL_SERVER_KEY_SIZE` | `-` | mod_ssl不支持 | | `SSL_SERVER_SESSIONDIR` | `-` | mod_ssl不支持 | | `SSL_SERVER_CERTIFICATELOGDIR` | `-` | mod_ssl不支持 | | `SSL_SERVER_CERTFILE` | `-` | mod_ssl不支持 | | `SSL_SERVER_KEYFILE` | `-` | mod_ssl不支持 | | `SSL_SERVER_KEYFILETYPE` | `-` | mod_ssl不支持 | | `SSL_CLIENT_KEY_EXP` | `-` | mod_ssl不支持 | | `SSL_CLIENT_KEY_ALGORITHM` | `-` | mod_ssl不支持 | | `SSL_CLIENT_KEY_SIZE` | `-` | mod_ssl不支持 | ## 自定义日志功能 如果mod_ssl被静态编译进Apache或者被动态加载(以DSO方式),则可以使用参考文档中说明的由`mod_log_config`提供的[自定义日志格式](#calibre_link-72)。但是为了向下兼容,不能使用用于扩展任何模块中任何变量的扩展格式"`%{`_varname_`}x`"和附加的密码格式"`%{`_name_`}c`"。[表3](#calibre_link-114)列出了已实现的格式。 ### 表 3: 自定义日志加密格式 | Function Call | 格式说明 | | --- | --- | | `%...{version}c` | SSL协议版本 | | `%...{cipher}c` | SSL密码 | | `%...{subjectdn}c` | 客户证书的 Subject Distinguished Name | | `%...{issuerdn}c` | 客户证书的 Issuer Distinguished Name | | `%...{errcode}c` | 客户证书的出错代码(数值) | | `%...{errstr}c` | 客户证书的出错信息(文字) |