Apache-2.2

mod_nss 和 mod_ssl 有什麼區別?

  • November 9, 2020

我正在設置一個 apache 顛覆伺服器,以使用安全證書對 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>   

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

我正在執行 Apache 版本:Redhat 6.9 上的 Apache/2.2.15

mod_ssl 使用 OpenSSL 庫來實現 TLS;mod_nss 改為使用 NSS 庫。它們是相互排斥的。

mod_nss 很少使用。事實上,NSS 幾乎沒有在任何地方使用,除了它起源的 Mozilla 應用程序(如現在的 Firefox 和 Thunderbird)。

除非您有非常具體和不尋常的要求強制使用 mod_nss,否則沒有理由使用它。

它們是工作相似的,具有相似的配置和幾乎相同的功能。使用最適合您的。

正如duskwuff 所說,mod_ssl 使用更廣泛,因此您會找到更多幫助,其他人可能更容易理解您的配置。

我個人喜歡 mod_nss 更好地管理證書的方式。它將它們保存在數據庫文件中,並使用 certutil 和 pk12util 來管理它們。certutil 可以輕鬆地向您顯示證書鏈並從數據庫中的證書對其進行驗證,因此您可以在啟動服務之前知道該鍊是否有效。Openssl 仍然沒有任何簡單的方法可以做到這一點。

引用自:https://serverfault.com/questions/916578