mod_nss 和 mod_ssl 有什么区别?

use*_*570 6 redhat svn apache-2.2

我正在设置一个 apache subversion 服务器以使用安全证书对 AD 域进行 kerberos 身份验证。

我已经成功地让它与带有 ssl.conf 配置的 mod_ssl 一起使用,但不能与 mod_nss 一起使用。对于 mod_nss,我遵循的配置主要来自这篇文章:https ://access.redhat.com/articles/1467293 。如果无法访问 mod_nss 的链接,我也在下面包含了突出的 mod_nss conf 行。

所以,只是想知道是否有任何使用 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>   
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我在 Redhat 6.9 上运行 Apache 版本:Apache/2.2.15

小智 6

mod_ssl 使用 OpenSSL 库来实现 TLS;mod_nss 使用 NSS 库代替。它们是相互排斥的。

mod_nss 很少使用。事实上,NSS 除了起源于 Mozilla 的应用程序(如现在的 Firefox 和 Thunderbird)之外几乎没有其他任何地方使用。

除非您有强制使用 mod_nss 的非常具体和不寻常的要求,否则没有理由使用它。

  • 还有 389、NetworkManager、ceph、chromium、Discord、evolution、Java 1.8.0+、LibreOffice、poppler、sssd、Steam、systemtap 以及其他一些我不关心的。 (2认同)

And*_*man 5

它们是同类产品,具有相似的配置和几乎相同的功能。使用最适合您的那一种。

正如 duskwuff 所说,mod_ssl 的使用范围更广,因此您会找到更多帮助,并且其他人可能更容易理解您的配置。

我个人喜欢 mod_nss 更好地管理证书的方式。它将它们保存在一个数据库文件中,并使用 certutil 和 pk12util 来管理它们。certutil 可以轻松地向您显示证书链并通过数据库中的证书对其进行验证,因此您可以启动服务之前了解该链是否有效。Openssl 仍然没有任何简单的方法可以做到这一点。