6
votes

Unity - Impossible d'envoyer une demande HTTPS en raison de la cryptographicexception

J'essaie d'envoyer une demande https à mon serveur distant, mais je reçois toujours l'exception suivante: xxx

au début, je pensais que c'était Un problème de validation de certificat, j'ai donc ajouté le code suivant avant d'envoyer la demande: xxx

s'avère que le ServerCertificateValidationCallback n'était même pas invoqué et L'exception était liée à "SSL uni" ou 'SSL Ciphers' .

Notez que mon URL de serveur distant est https://_my_app_.herokuapp.com/_path_ . Assez étrangement, si je change l'URL à tout autre serveur HTTPS tel que https://www.google.com ou https: //www.facebook. com Je ne comprends pas l'exception et la demande réussit.

On dirait que la mise en œuvre mono utilisée par Unity ne prend pas en charge les suites ciphères de Heroku (je peux garantir cela parce que j'ai récemment développé une demande monotouch Cela a été capable de se connecter au même serveur).

est-ce un problème client ou serveur? Devrais-je ajouter du code de hacky du côté du client ou si la configuration du serveur doit-elle être modifiée?


0 commentaires

4 Réponses :


3
votes

Je n'ai pas de réponse complète, mais ce n'est pas une question de Ciphersuite; La StackTrace montre qu'il s'agit d'un problème de validation du certificat au niveau bas de vérification de la signature avant que votre rappel soit impliqué. OID 1.2.840.113549.1.1.11 est SHA256Withrsa, et le fournisseur de sécurité (S?) Dans le client ne le gère pas. Vous travaillez d'accord avec les serveurs traditionnels tels que Google et Facebook, car ils continuent d'utiliser CERTS SIGNÉ SHA1Withrsa, précisément parce que le support client / navigateur pour SHA256 + RSA n'est pas encore universel, bien que de plus en plus courant. https://cabforum.org/baseline-requirs-Documents/ nécessite RSA2048 cette année ( Janvier 2014) inconditionnellement, mais permet à SHA1 "jusqu'à ce que SHA-256 [Vérifier] soit largement soutenu par des navigateurs utilisés par une partie substantielle des fêtes de comptoir dans le monde entier."

OTOH SHA1 n'a pas encore de marge de sécurité, de nombreuses personnes poussent SHA256 et Digicert semble être parmi les pousseurs plus difficiles: http://www.digicert.com/transitioning-a-aaa-2.htm . Le certificat que je vois de Herokuapp.com a été publié récemment (2014-01-21) afin que cela puisse être un choix délibéré "Améliorerons la sécurité" ou juste "Utilisez ce qui est pratique et Digicert nous a donné cela". FWIW I Observez id.heroku.com et www.heroku.com Utilisez un certificat SHA1 + RSA (2048) à partir de 2013-10-12. Si vous ne pouvez pas obtenir votre client fixe pour SHA256 + RSA et Heroku est disposé, ils pourraient obtenir et utiliser un certificat SHA1 + RSA pour l'instant, mais vous aurez probablement besoin d'une vraie solution plus tard.

quant à cela, Comment Puis-je signer un fichier à l'aide de RSA et SHA256 avec .net? indique que pour (MS) DOT-NET Signature avec SHA256 + RSA doit jouer un fournisseur de crypto non par défaut et une vérification IME est généralement la même que la signature . Je n'utilise pas mono ou sais que si le même problème ou si le même problème s'applique là-bas, mais c'est la région où je voudrais regarder d'abord.


0 commentaires

2
votes

Je n'ai pas pu trouver la raison mais j'ai trouvé la solution pour le problème.

J'utilisais Unityhttp - une "bibliothèque HTTP basée sur tcpclient" - pour effectuer des demandes HTTP. En passant à l'unité de l'unité WWW Class Tous https envoyé à mon serveur Heroku a réussi. J'ai découvert que lorsque vous utilisez Unityhttp L'unité de la bibliothèque tentative d'exécution de la validation CrossDomain.xml sur le port 843, quant à l'utilisation de www Class effectué une telle validation sur le port 80.

Peut-être Unityhttp La mise en œuvre de Stuffs de bas niveau qui n'est actuellement pas compatible avec les serveurs Heroku, je n'engagerai pas cela, mais je vais ouvrir un problème sur le Unityhttp Le référentiel GITHUB de toute façon.


0 commentaires

3
votes

AS de l'unité 4.3, la version de mono de l'unité de l'unité ne prend pas en charge SHA-256 pour SSL CERTS. Le "meilleur" supporté est SHA-1. Nous avions utilisé Godaddy (je sais, je sais) pour émettre le cert et heureusement, ils avaient une page Web où nous pourrions retrouver le certificat de SHA-256 à SHA-1. Maintenant, le certificat SSL fonctionne bien.

Il sera presque impossible de trouver une autorité de certification qui émettra un certificat SHA-1 afin que vous fassiez à repousser.

La classe Web de l'unité d'unité est écrit en C ++ et ne passe pas par mono. C'est pourquoi vous pouvez vous connecter à HTTPS via www, mais pas via le plug-in Unityhttp.


1 commentaires

Considérant que SHA-1 est amorti comme un certificat SSL valide Cette réponse n'est probablement pas un bon travail.



0
votes

SHA-256 (algorithme 1.2.840.113549.1.1.11) devrait travailler avec l'unité à partir de 2,5,3. https://github.com/unity-technologies/mono/pull/134/files Vous êtes la bienvenue


2 commentaires

Merci! Avez-vous une idée de combien de temps cela pourrait prendre pour cela pour en faire une libération unitaire?


Je suis sûr que vous savez bien, cela étant presque un an plus tard, mais cela a été corrigé depuis longtemps. :)