SSL/TLS高强度加密:兼容性

所有PC都是兼容的。但是其中一些比另一些更兼容。

-- <cite class="calibre63">无名氏</cite>

本文讨论对其他SSL方案的向下兼容性。mod_ssl并不是Apache唯一存在的SSL方案,另外还有四种主要的产品:Ben Laurie的免费的Apache-SSL(出现在1998年,与mod_ssl同源),RedHat商业化的Secure Web Server(基于mod_ssl),Covalent商业化的Raven SSL Module(同样基于mod_ssl)和C2Net的商业化产品Stronghold(直到Stringhold2.x都基于一个不同的演化分支Sioux,从Stronghold3.x起基于mod_ssl)。

使用mod_ssl的原因是,mod_ssl几乎提供了在大多数情况下能够兼容其他方案的功能的超集。事实上,兼容性包括三个方面:配置指令、环境变量和自定义日志功能。

配置指令

为了兼容SSL方案的配置指令,我们做了一个简单的对应:有直接对应的指令则简单对应,没有直接对应的指令则会在日志文件中产生警告信息。表1列出已实现对应的指令。目前仅对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列出了已实现的变量的演变。

表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不支持

自定义日志功能

如果modssl被静态编译进Apache或者被动态加载(以DSO方式),则可以使用参考文档中说明的由mod_log_config提供的自定义日志格式。但是为了向下兼容,不能使用用于扩展任何模块中任何变量的扩展格式"%{_varname}x"和附加的密码格式"%{name}c"。表3列出了已实现的格式。

表 3: 自定义日志加密格式

Function Call 格式说明
%...{version}c SSL协议版本
%...{cipher}c SSL密码
%...{subjectdn}c 客户证书的 Subject Distinguished Name
%...{issuerdn}c 客户证书的 Issuer Distinguished Name
%...{errcode}c 客户证书的出错代码(数值)
%...{errstr}c 客户证书的出错信息(文字)