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

优质
小牛编辑
141浏览
2023-12-01

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

-- 无名氏

本文讨论对其他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 兼容性:
SSLEnableSSLEngine on已强化
SSLDisableSSLEngine off已强化
SSLLogFile fileSSLLog file已强化
SSLRequiredCiphers specSSLCipherSuite spec被更名
SSLRequireCipher c1 ...SSLRequire %{SSL_CIPHER} in {"c1", ...}无显著改变
SSLBanCipher c1 ...SSLRequire not (%{SSL_CIPHER} in {"c1", ...})无显著改变
SSLFakeBasicAuthSSLOptions +FakeBasicAuth被合并
SSLCacheServerPath dir-已废除
SSLCacheServerPort integer-已废除
Apache-SSL 1.x 兼容性:
SSLExportClientCertificatesSSLOptions +ExportCertData被合并
SSLCacheServerRunDir dir-不再支持
Sioux 1.x 兼容性:
SSL_CertFile fileSSLCertificateFile file被更名
SSL_KeyFile fileSSLCertificateKeyFile file被更名
SSL_CipherSuite argSSLCipherSuite arg被更名
SSL_X509VerifyDir argSSLCACertificatePath arg被更名
SSL_Log fileSSLLogFile file被更名
SSL_Connect flagSSLEngine flag被更名
SSL_ClientAuth argSSLVerifyClient arg被更名
SSL_X509VerifyDepth argSSLVerifyDepth 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 flagSSLEngine flag被更名
SSLSessionLockFile fileSSLMutex file被更名
SSLCipherList specSSLCipherSuite spec被更名
RequireSSLSSLRequireSSL被更名
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_VERSIONSSL_PROTOCOL被更名
SSLEAY_VERSIONSSL_VERSION_LIBRARY被更名
HTTPS_SECRETKEYSIZESSL_CIPHER_USEKEYSIZE被更名
HTTPS_KEYSIZESSL_CIPHER_ALGKEYSIZE被更名
HTTPS_CIPHERSSL_CIPHER被更名
HTTPS_EXPORTSSL_CIPHER_EXPORT被更名
SSL_SERVER_KEY_SIZESSL_CIPHER_ALGKEYSIZE被更名
SSL_SERVER_CERTIFICATESSL_SERVER_CERT被更名
SSL_SERVER_CERT_STARTSSL_SERVER_V_START被更名
SSL_SERVER_CERT_ENDSSL_SERVER_V_END被更名
SSL_SERVER_CERT_SERIALSSL_SERVER_M_SERIAL被更名
SSL_SERVER_SIGNATURE_ALGORITHMSSL_SERVER_A_SIG被更名
SSL_SERVER_DNSSL_SERVER_S_DN被更名
SSL_SERVER_CNSSL_SERVER_S_DN_CN被更名
SSL_SERVER_EMAILSSL_SERVER_S_DN_Email被更名
SSL_SERVER_OSSL_SERVER_S_DN_O被更名
SSL_SERVER_OUSSL_SERVER_S_DN_OU被更名
SSL_SERVER_CSSL_SERVER_S_DN_C被更名
SSL_SERVER_SPSSL_SERVER_S_DN_SP被更名
SSL_SERVER_LSSL_SERVER_S_DN_L被更名
SSL_SERVER_IDNSSL_SERVER_I_DN被更名
SSL_SERVER_ICNSSL_SERVER_I_DN_CN被更名
SSL_SERVER_IEMAILSSL_SERVER_I_DN_Email被更名
SSL_SERVER_IOSSL_SERVER_I_DN_O被更名
SSL_SERVER_IOUSSL_SERVER_I_DN_OU被更名
SSL_SERVER_ICSSL_SERVER_I_DN_C被更名
SSL_SERVER_ISPSSL_SERVER_I_DN_SP被更名
SSL_SERVER_ILSSL_SERVER_I_DN_L被更名
SSL_CLIENT_CERTIFICATESSL_CLIENT_CERT被更名
SSL_CLIENT_CERT_STARTSSL_CLIENT_V_START被更名
SSL_CLIENT_CERT_ENDSSL_CLIENT_V_END被更名
SSL_CLIENT_CERT_SERIALSSL_CLIENT_M_SERIAL被更名
SSL_CLIENT_SIGNATURE_ALGORITHMSSL_CLIENT_A_SIG被更名
SSL_CLIENT_DNSSL_CLIENT_S_DN被更名
SSL_CLIENT_CNSSL_CLIENT_S_DN_CN被更名
SSL_CLIENT_EMAILSSL_CLIENT_S_DN_Email被更名
SSL_CLIENT_OSSL_CLIENT_S_DN_O被更名
SSL_CLIENT_OUSSL_CLIENT_S_DN_OU被更名
SSL_CLIENT_CSSL_CLIENT_S_DN_C被更名
SSL_CLIENT_SPSSL_CLIENT_S_DN_SP被更名
SSL_CLIENT_LSSL_CLIENT_S_DN_L被更名
SSL_CLIENT_IDNSSL_CLIENT_I_DN被更名
SSL_CLIENT_ICNSSL_CLIENT_I_DN_CN被更名
SSL_CLIENT_IEMAILSSL_CLIENT_I_DN_Email被更名
SSL_CLIENT_IOSSL_CLIENT_I_DN_O被更名
SSL_CLIENT_IOUSSL_CLIENT_I_DN_OU被更名
SSL_CLIENT_ICSSL_CLIENT_I_DN_C被更名
SSL_CLIENT_ISPSSL_CLIENT_I_DN_SP被更名
SSL_CLIENT_ILSSL_CLIENT_I_DN_L被更名
SSL_EXPORTSSL_CIPHER_EXPORT被更名
SSL_KEYSIZESSL_CIPHER_ALGKEYSIZE被更名
SSL_SECKEYSIZESSL_CIPHER_USEKEYSIZE被更名
SSL_SSLEAY_VERSIONSSL_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提供的自定义日志格式。但是为了向下兼容,不能使用用于扩展任何模块中任何变量的扩展格式"%{varname}x"和附加的密码格式"%{name}c"。表3列出了已实现的格式。

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

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