Comment ajouter des algorithmes de curl en php?
Je suis en train d'utiliser php curl pour vous connecter à un site, mais l'erreur "aucun algorithme de chiffrement". Complément d'enquête, et je pense que cela a quelque chose à voir avec NSS? J'ai découvert qu'à partir de la ligne de commande, je peux reproduire l'erreur (donc, le problème est certainement en curl, et non pas avec le php wrapper), mais que si j'ai mis --algorithmes ecdhe_ecdsa_aes_128_sha alors cela fonctionne:
[ec2-user@ip-10-181-165-22 current]$ curl -I https://sslspdy.com
curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).
[ec2-user@ip-10-181-165-22 current]$ curl -I --ciphers ecdhe_ecdsa_aes_128_sha https://sslspdy.com
HTTP/1.1 200 OK
Server: nginx centminmod
Content-Type: text/html; charset=utf-8
Connection: close
Vary: Accept-Encoding
Strict-Transport-Security: max-age=31536000; includeSubdomains
Date: Sat, 07 Feb 1970 22:34:32 GMT
X-Page-Speed: ngx_pagespeed
Cache-Control: max-age=0, no-cache
Donc mes questions sont,
- Pourquoi est-ce arrivé? Je n'ai pas été en mesure de trouver une explication en ligne comment les algorithmes de chiffrement de travail dans curl; il semble que chaque page est écrite avec l'hypothèse que le lecteur est déjà un expert dans le domaine, malheureusement, une phrase comme "vous êtes sans doute à l'aide de NSS, donc essayez de changer la PKCS FIPS" est totalement incompréhensible pour moi, et googler vais expliquer les composants individuels (généralement par référence à 20 ans), et non pas comment ils se rapportent les uns aux autres.
- Est-il de toute façon je peux prendre curl dites-moi quelles sont les algorithmes c'est d'essayer et qui chiffre le serveur va accepter? J'ai essayé de regarder le serveur sur ssllabs, mais il semble dire que le serveur accepte tous les algorithmes, dont il n'a évidemment pas.
- Quelles sont les options que j'ai besoin de passer à curl_setopt pour que mon script php est capable de se connecter à ce serveur?
- Si j'ai mis la clef de chiffrement pour cela, que la rupture d'autres sites? Est-il quelque chose que je peux faire pour que curl est capable de se connecter à tous les sites sécurisés, ou dois-je faire manuellement itérer sur les différents algorithmes d'essayer chacun d'eux pour trouver celui qui fonctionne?
OriginalL'auteur Benubird | 2015-06-05
Vous devez vous connecter pour publier un commentaire.
Il dépend d'un certain nombre de choses. Les bibliothèques de client et serveur, le client et les configurations de serveur, etc. Vous aurez besoin de fournir plus de détails.
Utiliser le bon outil pour le travail. Dans ce cas, c'est une mise à jour
sslscan
.CURLOPT_SSL_CIPHER_LIST
.Peut-être. Cela dépend de ce site particulier de configuration.
Idéalement, vous choisissez 12 ou 16 suites de chiffrement que vous approuver, et ensuite de les utiliser au lieu d'un. Le 12 ou 16 couvre la plupart des sites que vous rencontrez sur internet.
Voici la liste que j'utilise habituellement. Son de Qui Suites de Chiffrement à activer pour Socket SSL?:
Je voudrais fossé de la
TLS_RSA_*
suites de chiffrement, car ils sont la clé de transport, mais j'ai besoin d'eux pour celles de plus les serveurs IIS je rencontre.Comme vous pouvez le voir sur les résultats de l'analyse ci-dessous, cette liste est en intersection avec le serveur de la liste.
Notez que vous ne précisez pas, dire
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
. Plutôt, dans OpenSSL, vous spécifiez la OpenSSL nomECDHE-ECDSA-AES256-SHA384
pour la suite. Vous pouvez trouver la OpenSSL noms à la documentation pour openssl ciphers.Avec OpenSSL, vous pouvez également utiliser la chaîne
"HIGH:!aNULL:!MD5:!RC4:!PSK:!SRP"
. Vous obtenez environ 40 ou 50 qui sont raisonnablement bon choix.Vous pouvez exécuter la OpenSSL ciphers de commande pour voir ce que la liste est:
Vous pouvez utiliser une version mise à jour de
sslscan
pour déterminer ce que les suites de chiffrement sont disponibles:J'ai trouvé un curl compatible liste ici: curl.haxx.se/docs/ssl-ciphers.html
OriginalL'auteur jww
Ce n'est pas spécifique à friser. Avec SSL/TLS, le client offre les chiffrements il est prêt à utiliser et le serveur choisit de ces chiffre lequel il prend en charge aussi. Par défaut, les clients n'offrent pas tous les algorithmes qu'ils peuvent, et surtout pas des algorithmes qui sont considérés comme faibles.
Avec wireshark, vous pouvez voir quels sont les algorithmes proposés par le client. Vous pouvez aussi vérifier que votre client contre
https://www.ssllabs.com/ssltest/viewMyClient.html qui montre les algorithmes de chiffrement sont offerts. Ou de créer un serveur de test avec
openssl s_server -cipher ALL -www
et connecter le client, il va montrer les algorithmes de chiffrement partagée par le client et le serveur.CURLOPT_SSL_CIPHER_LIST
avec une valeur deECDHE-ECDSA-AES128-SHA
pourrait fonctionner dans votre cas. Mais cette valeur dépend en réalité de la façon dont votre curl a été compilé. Curl prise en charge de différentes SSL/TLS backends, comme OpenSSL, NSS, SecureTransport, SChannel, GnuTLS et la syntaxe exacte dépend du backend. Cet exemple, le réglage est valable pour OpenSSL backend.Si vous vous limitez à l'échelle mondiale pour ce jeu, alors oui. Pour les paramètres globaux de mieux vous en ajouter d'autres, trop, c'est à dire
HIGH:ECDHE-ECDSA-AES128-SHA:!aNULL
. Bug de nouveau, la syntaxe exacte dépend du SSL/TLS backend.OriginalL'auteur Steffen Ullrich
Utilisation
curl_setopt
avecCURLOPT_SSL_CIPHER_LIST
OriginalL'auteur Halcyon