Qual é a diferença entre mod_nss e mod_ssl?

1

Estou configurando um servidor subversion do apache para usar certificados seguros para a autenticação do kerberos com um domínio do AD.

Consegui fazê-lo funcionar com mod_ssl com a configuração ssl.conf abaixo, mas não com mod_nss. Para mod_nss a configuração que eu segui é principalmente deste artigo: link . Caso o link para o mod_nss esteja inacessível, incluímos também as linhas salientes do mod_nss conf abaixo.

Então, só queria saber se havia alguma diretriz / pros / cons para usar mod_ssl e mod_nss. Bônus se eu puder entender o que estava errado com mod_nss. Eu estava recebendo erros de protocolo no cliente.

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

Estou executando a versão do Apache: Apache / 2.2.15 no Redhat 6.9

    
por user55570 14.06.2018 / 04:06

2 respostas

2

mod_ssl usa a biblioteca OpenSSL para implementar o TLS; mod_nss usa a biblioteca NSS. Eles são mutuamente exclusivos.

mod_nss é raramente usado. Na verdade, o NSS é pouco usado em qualquer lugar que não seja os aplicativos Mozilla com os quais se originou (como o Firefox e o Thunderbird, atualmente).

A menos que você tenha requisitos muito específicos e incomuns que forcem o uso de mod_nss, não há razão para usá-lo.

    
por 14.06.2018 / 04:39
2

São workenikes, com configuração semelhante e recursos quase idênticos. Use o que for melhor para você.

Como diz o duskwuff, mod_ssl é muito mais usado, então você encontrará mais ajuda e poderá ser mais fácil para os outros entenderem sua configuração.

Pessoalmente, gosto da maneira como mod_nss gerencia os certificados melhor. Ele os mantém em um arquivo de banco de dados e usa o certutil e o pk12util para gerenciá-los. Certutil pode facilmente mostrar-lhe uma cadeia de certificados e validá-lo a partir dos certificados em seu banco de dados, para que você saiba se a cadeia é válida antes de iniciar o serviço. Openssl não tem nenhuma maneira fácil de fazer isso.

    
por 14.06.2018 / 08:46