我正在设置一个 apache subversion 服务器,以使用安全证书对 AD 域进行 Kerberos 身份验证。
我已成功使其与 mod_ssl 配合使用,ssl.conf 配置如下,但与 mod_nss 配合使用则不行。对于 mod_nss,我遵循的配置主要来自这篇文章:https://access.redhat.com/articles/1467293。如果 mod_nss 的链接无法访问,我还在下面包含了重要的 mod_nss 配置行。
所以,我只是想知道使用 mod_ssl 和 mod_nss 是否有任何指导方针/优点/缺点。如果我能理解 mod_nss 的问题所在,那就更好了。我在客户端上遇到了协议错误。
ssl.conf:
LoadModule ssl_module modules/mod_ssl.so
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost _default_:443>
ErrorLog logs/svn_ssl_error_log
TransferLog logs/svn_ssl_access_log
LogLevel debug
SSLEngine on
SSLProtocol TLSv1.1 TLSv1.2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
<Location /App_User>
DAV svn
SVNPath "/opt/user/App_User"
AuthType Kerberos
AuthName Kerberos
KrbMethodNegotiate Off
KrbMethodK5Passwd On
KrbServiceName Any
KrbAuthRealms SRV01.COMPANY.COM
KrbSaveCredentials on
KrbLocalUserMapping on
KrbVerifyKDC Off
AuthzSVNAccessFile /opt/user/access.txt
require valid-user
</Location>
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
nss.conf:
NSSEngine on
NSSPassPhraseDialog file:/etc/httpd/alias/pin.txt
NSSProtocol TLSv1.0,TLSv1.1,TLSv1.2
NSSCipherSuite +ecdh_ecdsa_aes_128_sha,+ecdh_ecdsa_aes_256_sha,+ecdhe_ecdsa_aes_128_gcm_sha_256,+ecdhe_ecdsa_aes_128_sha,+ecdhe_ecdsa_aes_128_sha_256,+ecdhe_ecdsa_aes_256_gcm_sha_384,+ecdhe_ecdsa_aes_256_sha,+ecdhe_ecdsa_aes_256_sha_384,+ecdhe_rsa_aes_128_gcm_sha_256,+ecdhe_rsa_aes_128_sha,+ecdhe_rsa_aes_128_sha_256,+ecdhe_rsa_aes_256_gcm_sha_384,+ecdhe_rsa_aes_256_sha,+ecdhe_rsa_aes_256_sha_384,+ecdh_rsa_aes_128_sha,+ecdh_rsa_aes_256_sha,+rsa_aes_128_gcm_sha_256,+rsa_aes_128_sha,+rsa_aes_256_gcm_sha_384,+rsa_aes_256_sha,
NSSCertificateDatabase /etc/httpd/alias
# The name needs to match the name in the db
NSSNickname rhel7-64.example.com
NSSProtocol TLSv1.0,TLSv1.1,TLSv1.2
NSSCipherSuite +ecdh_ecdsa_aes_128_sha,+ecdh_ecdsa_aes_256_sha,+ecdhe_ecdsa_aes_128_gcm_sha_256,+ecdhe_ecdsa_aes_128_sha,+ecdhe_ecdsa_aes_128_sha_256,+ecdhe_ecdsa_aes_256_gcm_sha_384,+ecdhe_ecdsa_aes_256_sha,+ecdhe_ecdsa_aes_256_sha_384,+ecdhe_rsa_aes_128_gcm_sha_256,+ecdhe_rsa_aes_128_sha,+ecdhe_rsa_aes_128_sha_256,+ecdhe_rsa_aes_256_gcm_sha_384,+ecdhe_rsa_aes_256_sha,+ecdhe_rsa_aes_256_sha_384,+ecdh_rsa_aes_128_sha,+ecdh_rsa_aes_256_sha,+rsa_aes_128_gcm_sha_256,+rsa_aes_128_sha,+rsa_aes_256_gcm_sha_384,+rsa_aes_256_sha,+rsa_rc4_128_sha
NSSCertificateDatabase /etc/httpd/alias
我在 Redhat 6.9 上运行 Apache 版本:Apache/2.2.15
答案1
mod_ssl 使用 OpenSSL 库来实现 TLS;mod_nss 使用 NSS 库。它们是互斥的。
mod_nss 很少使用。事实上,NSS 除了起源于 Mozilla 的应用程序(如如今的 Firefox 和 Thunderbird)之外几乎没在其他地方使用。
除非您有非常特殊和不寻常的要求强制使用 mod_nss,否则没有理由使用它。
答案2
它们的工作方式类似,配置相似,功能也几乎相同。使用最适合您的那一个。
正如 duskwuff 所说,mod_ssl 的使用更为广泛,因此您会发现更多帮助,其他人也可能更容易理解您的配置。
我个人更喜欢 mod_nss 管理证书的方式。它将它们保存在数据库文件中,并使用 certutil 和 pk12util 来管理它们。certutil 可以轻松向您显示证书链,并从数据库中的证书中对其进行验证,这样您就知道该链是否有效前你启动服务。OpenSSL 仍然没有任何简单的方法来做到这一点。