2015-09-09 1 views
2

Nous avons reçu cet email de Authorize.NET à propos de certaines mises à jour techniques. J'essaie de comprendre ce qui doit être fait, mais mes compétences manquent dans ce domaine et je pourrais avoir besoin d'aide. Ils avaient quatre points dans leur e-mail:Comment dois-je procéder à la mise à niveau vers TLS 1.2?

  1. Après la mise à jour terminée le 21 Septembre, un site Web ou d'une solution de paiement qui se connecte via api.authorize.net qui ne peut pas valider SHA-2 certificats signés ne parviennent pas à se connecter aux serveurs de Authorize.Net.

    Notre serveur utilise SHA-1, mais nous avons installé un certificat GoDaddy qui utilise SHA-2.

  2. En octobre de cette année, grâce aux mises à jour du système, il sera possible de recevoir des ID Authorize.Net (ID de transaction, ID de lot, etc.) qui ne sont pas dans un ordre séquentiel.

    Je ne pense pas que celui-ci nous affectera. Comme vous le savez peut-être déjà, les nouvelles exigences de la norme PCI DSS stipulent que tous les systèmes de paiement doivent désactiver TLS 1.0 avant le 30 juin 2016. Pour nous assurer que nous sommes conformes avant cette date, nous désactiverons TLS 1.0 en premier. l'environnement de bac à sable, puis dans nos environnements de production. Les deux dates sont encore à déterminer, mais assurez-vous que vos solutions sont préparées pour ce changement dès que possible.

Je sais que nous devrons mettre à jour OpenSSL sur notre serveur. C'est ce que nous avons ...

Current  Version   Recommended  Depends On 
TLS   1.0    1.2  
OpenSSL  0.9.8h   1.0.1 
PHP   5.2.6   5.6    Open SSL 1.0.1 
Apache  2.2.10   2.4  
Linux OS SUSE Enterprise SUSE Enterprise 
      Server 11  Server 12 
Drupal  6.9    7.39    Mysql 5.0.15/PHP 5.4 
MySQL  5.0.67   5.6    SUSE Enterprise Server 12 (x86_64) 
phpMyAdmin 3.3.3   4.4.14.1   PHP 5.3.7/MySQL 5.5 
+0

Vous avez déjà répondu à votre question, "Je sais que nous devrons mettre à jour OpenSSL sur notre serveur." Pour prendre en charge TLS1.2, il suffit de mettre à jour openssl vers la version 1.0.1 ou ultérieure. –

+0

Quelle est la configuration système requise pour la mise à niveau vers OpenSSL 1.0.1? – AllisonC

+0

Comment pouvons-nous faire en sorte que notre serveur utilise SHA2? – AllisonC

Répondre

1

Comment dois-je procéder à la mise à niveau de TLS 1.2?

Pour répondre aux exigences techniques, il suffit d'utiliser OpenSSL 1.0.1 ou 1.0.2. Les deux fournissent TLS 1.2, et les deux fournissent trivialement SHA-256. (Il y a d'autres accomplissements cachés, comme OpenSSL 1.0.0 ne fournit pas le complément complet de l'équipement EC et le complément complet des suites de chiffrement TLS 1.2, mais 1.0.1 et 1.0.2 le font).

Dans votre code C qui utilise OpenSSL, tout ce que vous devez faire pour le contexte SSL ou Session:

/* Useless return value ??? */ 
SSL_library_init(); 

const SSL_METHOD* method = SSLv23_method(); 
if(NULL == method) handleFailure(); 

SSL_CTX* ctx = SSL_CTX_new(method); 
if(ctx == NULL) handleFailure(); 

/* Cannot fail ??? */ 
const long flags = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | \ 
    SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_COMPRESSION; 
SSL_CTX_set_options(ctx, flags); 

Pour les configurations de serveur Apache comme, utiliser quelque chose comme ce qui suit (le mien comprend +TLSv1 +TLSv1.1):

# From my CentOS production server 
SSLProtocol -all +TLSv1.2 

Vous devriez probablement tendance à les suites de chiffrement, aussi. Pour cela, en C-code:

const char CIHPHER_LIST[] = "HIGH:!aNULL:!RC4:!MD5" 

/* Ensure at least one cipher suite is added, which indicates non-failure */ 
int rc = SSL_CTX_set_cipher_list(ctx, CIHPHER_LIST); 
if(!(rc >= 1)) handleFailure(); 

Et dans un fichier de configuration Apache comme:

# From my CentOS production server 
SSLCipherSuite HIGH:!aNULL:!MD5:!RC4 

Si vous voulez éviter le transport de clés RSA (TLS 1.3 est le retirer), puis:

SSLCipherSuite HIGH:!aNULL:!MD5:!RC4:!kRSA 

Lorsque vous supprimez le transport de clé RSA, vous êtes à peu près à gauche avec les protocoles d'échange de clés éphémères (modulo suites de chiffrement comme PSK et SRP).

Si vous souhaitez utiliser explicitement les échanges de clés éphémères, vous aurez besoin de quelque chose comme kEECDH:kECDHE:kDHE:kEDH:!aNULL. Voir la page de manuel openssl ciphers(1) pour plus de détails. Je lis entre les lignes, mais l'exigence TLS 1.2 a probablement quelque chose à voir avec le chiffrement authentifié, et les modes de fonctionnement comme GCM. Pour cela, utilisez openssl ciphers(1) nouveau:

$ openssl ciphers -v 'HIGH:!aNULL' | grep GCM 
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH  Au=RSA Enc=AESGCM(256) Mac=AEAD 
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH  Au=ECDSA Enc=AESGCM(256) Mac=AEAD 
DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH  Au=DSS Enc=AESGCM(256) Mac=AEAD 
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH  Au=RSA Enc=AESGCM(256) Mac=AEAD 
ECDH-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(256) Mac=AEAD 
ECDH-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(256) Mac=AEAD 
AES256-GCM-SHA384  TLSv1.2 Kx=RSA  Au=RSA Enc=AESGCM(256) Mac=AEAD 
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH  Au=RSA Enc=AESGCM(128) Mac=AEAD 
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH  Au=ECDSA Enc=AESGCM(128) Mac=AEAD 
DHE-DSS-AES128-GCM-SHA256 TLSv1.2 Kx=DH  Au=DSS Enc=AESGCM(128) Mac=AEAD 
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH  Au=RSA Enc=AESGCM(128) Mac=AEAD 
ECDH-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(128) Mac=AEAD 
ECDH-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(128) Mac=AEAD 
AES128-GCM-SHA256  TLSv1.2 Kx=RSA  Au=RSA Enc=AESGCM(128) Mac=AEAD 

Ou:

$ openssl ciphers -v 'HIGH:!aNULL' | grep GCM | grep -v "Kx=RSA" | cut -d " " -f 1 
ECDHE-RSA-AES256-GCM-SHA384 
ECDHE-ECDSA-AES256-GCM-SHA384 
DHE-DSS-AES256-GCM-SHA384 
DHE-RSA-AES256-GCM-SHA384 
ECDH-RSA-AES256-GCM-SHA384 
ECDH-ECDSA-AES256-GCM-SHA384 
ECDHE-RSA-AES128-GCM-SHA256 
ECDHE-ECDSA-AES128-GCM-SHA256 
DHE-DSS-AES128-GCM-SHA256 
DHE-RSA-AES128-GCM-SHA256 
ECDH-RSA-AES128-GCM-SHA256 
ECDH-ECDSA-AES128-GCM-SHA256 

Au lieu de spécifier HIGH:!aNULL:!MD5:!RC4:!kRSA, vous pouvez effectuer les opérations suivantes:

const char CIPHER_LIST[] = 
    "ECDHE-RSA-AES256-GCM-SHA384:" 
    "ECDHE-ECDSA-AES256-GCM-SHA384:" 
    "DHE-DSS-AES256-GCM-SHA384:" 
    "DHE-RSA-AES256-GCM-SHA384:" 
    "ECDH-RSA-AES256-GCM-SHA384:" 
    "ECDH-ECDSA-AES256-GCM-SHA384:" 
    "ECDHE-RSA-AES128-GCM-SHA256:" 
    "ECDHE-ECDSA-AES128-GCM-SHA256:" 
    "DHE-DSS-AES128-GCM-SHA256:" 
    "DHE-RSA-AES128-GCM-SHA256:" 
    "ECDH-RSA-AES128-GCM-SHA256:" 
    "ECDH-ECDSA-AES128-GCM-SHA256:" 

/* Ensure at least one cipher suite is added, which indicates non-failure */ 
int rc = SSL_CTX_set_cipher_list(ctx, CIPHER_LIST); 
if(!(rc >= 1)) handleFailure(); 

Si vous regardez la suite de chiffrement AES256-GCM-SHA384, vous verrez utilise le transport de clé (Kx=RSA), donc vous pouvez l'éviter même si son TLS 1.2. Hece la raison pour le grep -v dessus. Pour être complet, Au=RSA est correct. Cela signifie simplement que le serveur utilise sa clé RSA pour la signature uniquement. Et en pratique, Au=DSS est rarement utilisé, ainsi OpenSSL supprimera la suite de chiffrement s'il n'y a pas de clé DSS.


Maintenant, les difficultés devient probablement une distro qui fournit les dernières OpenSSL 1.0.2 et fournit le soutien à long terme. Mes machines CentOS ne le fournissent pas, donc je dois le construire à partir de sources, puis reconstruire chaque bibliothèque ou programme qui dépend d'OpenSSL tout en jouant à ces stupides jeux r-path.

Dans votre cas, cela ressemble à Apache, PHP, Drupal, MySQL, phpAdmin (est-ce que quelqu'un l'utilise vraiment quand la sécurité est un problème :) et ses amis.

+0

Je suis désolé, c'est vraiment au-dessus de ma tête. Je n'ai jamais rien modifié en C avant donc je ne suis pas vraiment sûr de ce qu'il faut faire? – AllisonC

+0

@Allison - Quelles tâches devez-vous effectuer et avec quelles langues travaillez-vous? – jww

+0

Je dois mettre à jour OpenSSL. Ceci est pour un site Web de commerce électronique. Nous avons une date limite de Authorize.net où nous devons obtenir cette mise à jour. – AllisonC