2010-01-01 3 views
1

J'écris une application cliente qui doit interroger une URL et confirmer que l'utilisateur est autorisé à utiliser le client. Pensez-y comme un mécanisme de licence très rudimentaire. La page sur le serveur écrit une chaîne de texte en clair contenant des informations sur l'utilisateur qui sert de validation. Tout cela est fait sur SSL.HTTPWebRequest, validation du point de terminaison SSL et

Cependant, je suis un peu paranoïaque quant à savoir si ce "système" est assez sécurisé. Par exemple, si j'installe Fiddler et que je vérifie SslPolicyError dans ServicePointManager.ServerCertificateValidationCallback, il est valide. Donc, je peux facilement casser le système avec Fiddler. Ce que j'ai remarqué est que dans ce cas, le paramètre X509Certificate tient Issuer: = ... fiddler2.com Maintenant, je peux vérifier si l'émetteur de certificat correspond à ce que le serveur utilise maintenant. Mais le certificat de serveur peut être renouvelé avec une autorité de certification différente. Si cela se produisait, je finirais par avoir à faire en sorte que tous les utilisateurs installent un nouveau client: un cauchemar de support.

Je voudrais savoir,

Est-ce un mauvais système par la conception? Comme dans, SSL est-il insuffisant pour garantir une sécurité suffisante dans ce cas?

ou

Suis-je essayer de valider correctement le point final et si oui quelle est la meilleure façon de faire la validation?

Répondre

1

SSL fournit la sécurité de la couche de transport. Donc, dans ce cas, si vous avez un violon entre les deux, vous authentifiez réellement votre client contre Fiddler, pas contre le serveur de destination.

En outre, si le certificat de serveur est renouvelé avec une autorité de certification différente, il ne devrait pas importer tant que cette autorité de certification est approuvée sur le client. Vous pouvez demander à l'utilisateur de confirmer qu'il fait confiance à l'autorité de certification et d'installer le certificat d'autorité de certification dans le magasin "Poste de travail", sous le magasin "Autorités de certification racine de confiance". Comme il s'agit d'une application cliente, il vaudrait mieux déléguer tous ces problèmes à l'utilisateur, et votre application peut simplement faire le core qui reçoit le jeton du serveur. Si vous ne voulez pas d'interaction utilisateur, vous pouvez coder votre client pour qu'il ne se soucie pas de qui a émis le certificat, tant que le nom du cert correspond au nom de domaine du serveur dont vous parlez à.

Espérons que ça aide.

+0

Salut, merci pour la réponse. Je suis vraiment inquiet à propos des utilisateurs malveillants qui utilisent des certificats auto-signés pour passer notre vérification de licence à son propre site: et là en retournant une fausse réponse positive pour rendre notre système pense qu'il est valide. – Sameera

+0

Je ne sais pas quel est votre problème? Êtes-vous inquiet à propos d'un client falsifié ou d'un serveur falsifié? Si vous êtes inquiet au sujet d'un client usurpé, vous pouvez avoir un processus d'enregistrement comme première étape, où le client obtient une clé. Ensuite, le client utilise la clé fournie pour communiquer avec le serveur. La clé est juste un jeton que le serveur assigne, et toute la communication pourrait être faite sur SSL. – feroze

+0

Oui, ce que vous décrivez est similaire à ce que nous avons fini par utiliser. Merci. – Sameera

Questions connexes