12
votes

Validation du certificat personnalisé dans le service WCF

Je veux vérifier les certificats clients dans mon service WCF.

Mon objectif est d'autoriser uniquement les clients avec des certificats avec des empreintes de pouce spécifiques pour pouvoir communiquer avec mon service. P>

Mon service WCF est hébergé dans IIS, j'utilise BasichttpLinding and Security Mode = "Transport" avec type d'informations d'identification "Certificat". IIS nécessite des certificats clients pour la communication avec le service. P>

Merci d'avance pour l'aide. P>

mise à jour: Ma configuration: p>

public class CustomCertificateValidator : X509CertificateValidator
    {
        public override void Validate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate)
        {                
            throw new SecurityTokenValidationException("TEST Certificate was not issued by a trusted issuer TEST");
        }
    }


0 commentaires

3 Réponses :


14
votes

Vous pouvez créer une classe dérivée de X509CertificateValidator et l'utiliser pour effectuer une validation personnalisée du certificat entrant. Jetez une SecurityTokenvalidationException si vous souhaitez échouer la validation pour une raison quelconque.

Définissez le certificatValidationMode sur Personnalisé et spécifiez votre validateur dans la section Comportement de service clientCertificate du fichier de configuration.

Comment: créer un service utilisant un validateur de certificat personnalisé


15 commentaires

J'ai essayé d'ajouter un validateur personnalisé en client certificat, mais cela ne fonctionne pas. Il semble qu'il soit conçu pour valider le certificat client que le service utilisera en mode Duplex. Je dois valider le certificat entrant (certificat que le client envoie). Avez-vous essayé cette option dans ce scénario?


Cela peut fonctionner sur le client ou le côté service et est utilisé pour valider le certificat de message entrant.


Assurez-vous d'ajouter ceci au pour valider le client dans le service qui est ce que vous voulez. Le est utilisé uniquement sur le client pour valider le service.


J'ai ajouté ma configuration. Avez-vous besoin de plus d'informations?


La partie de la configuration que vous avez ajoutée semble correcte. Cependant, vous n'avez pas ajouté votre configuration de service. Alors s'il vous plaît vérifier si vous utilisez "SomeserviceBehavior" avec votre service. Il m'est arrivé de fumer quelques fois que je crée un comportement de service mais j'ai oublié de l'ajouter à mon service.


Je viens de remarquer que vous utilisez le transport plutôt si la sécurité du niveau de message. Pour que cela fonctionne, vous devez plutôt utiliser la sécurité du niveau de message.


J'ai posté ma configuration de service. Je pense que ce comportementConfiguration est défini correctement. Que pourrait être le problème? Au début, j'ai essayé de le configurer sur IIS Stackoverflow.com/questions/1559213/... mais cela ne fonctionne pas non plus. Y a-t-il un autre moyen d'accéder à des cérifiers envoyés par le client et de le vérifier? Ou peut-être qu'il y a quelque chose qui ne va pas avec ma configuration / code?


Et est-il possible d'utiliser la sécurité de niveau de message via HTTPS?


Vous pouvez utiliser le transportwithMessagEcredential comme mode de sécurité. Cela utilise une combinaison de HTTPS avec la sécurité des messages.


Lorsque je le change à cette valeur, je reçois: les paramètres SSL du service "Aucun" ne correspondent pas à ceux de l'IIS 'SSL, SSLNEGOTICERTERTER, SSLREQURECERTERT ".


Avez-vous ajouté et supprimez le ?


Oui, il ressemble à ceci:


Dans l'accès anonyme IIS est autorisé, aucune autre case à cocher n'est cochée dans cette fenêtre. En communication Windows nécessite que SSL soit vérifié et que les certificats clients sont choisis. Le mappage de certificats n'est pas vérifié. Je ne connais pas les noms exacts de ces champs / fenêtres car ce n'est pas une version anglaise de IIS.


Je ne trouve pas non plus de liaisons MEX dans ma configuration que certaines personnes pointent comme la raison du problème.


Dans IIS, vous ne devriez avoir rien de vérifié sur les certificats fournissant au client. Le certificat client doit faire partie du message, sinon WCF ne recevra pas le certificat et IIS effectue la validation du client.



7
votes

Je ne pense pas qu'il y a de toute façon avoir "la validation du certificat personnalisé" avec "Sécurité de transport". Cela ne fonctionne que par «Sécurité des messages».


1 commentaires

Pas vrai. J'ai une validation de certificat personnalisée en mode transport



1
votes

Oui, vous pouvez utiliser BasichttpLinding avec Security Set to Transport et vous devez vous accrocher à la création ServiceHost dans IIS - voir hôte de service personnalisé . Vous devriez être capable de valider des valeurs, des certificats ou de toute autre autre données si vous créez une section de configuration personnalisée pour définir la liste des critères de validation.

échantillon de code pour la mise en œuvre de l'ensemble de ce qui précède est disponible dans le code de téléchargement de Cette Artcule de codeProject .


0 commentaires