IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Certificat X509 : erreur SecurityKeyIdentifier


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 284
    Par défaut Certificat X509 : erreur SecurityKeyIdentifier
    Bonjour,

    Je dois développez une application qui doit pouvoir se connecter au registre national via des webservices. J'ai reçu les certificats de plusieurs environnements. L'application fonctionne très bien en test sauf en production aieieieieie. J'obtiens systématiquement une erreur :

    L'exception System.ServiceModel.Security.MessageSecurityException s'est produite
    HResult=0x80131501
    Message=Impossible de résoudre KeyInfo pour la vérification d'une signature : KeyInfo 'SecurityKeyIdentifier
    (
    IsReadOnly = False,
    Count = 1,
    Clause[0] = X509ThumbprintKeyIdentifierClause(Hash = 0x0EB85EF654988CA40950BB2F89E5E310C9E92B51)
    )
    ', jetons disponibles 'SecurityTokenResolver
    (
    TokenCount = 1,
    TokenEntry[0] = (AllowedReferenceStyle=External, Token=System.IdentityModel.Tokens.X509SecurityToken, Parameters=System.ServiceModel.Security.Tokens.X509SecurityTokenParameters:
    InclusionMode: AlwaysToRecipient
    ReferenceStyle: Internal
    RequireDerivedKeys: True
    X509ReferenceStyle: Thumbprint)
    )
    '.
    Source=mscorlib
    Arborescence des appels de procédure*:
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
    at ConsoleApp1.TestConnectionServiceReference.TestConnectionService_v10PortType.testConnection(testConnectionRequest request)
    at ConsoleApp1.TestConnectionServiceReference.TestConnectionService_v10PortTypeClient.ConsoleApp1.TestConnectionServiceReference.TestConnectionService_v10PortType.testConnection(testConnectionRequest request) in \\Serveur\d\PH_NET\ZDIVERS\Fidus_test_csharp\Fidus_test_csharp\Connected Services\TestConnectionServiceReference\Reference.cs:line 458
    at ConsoleApp1.TestConnectionServiceReference.TestConnectionService_v10PortTypeClient.testConnection(TestConnectionRequestType testConnectionRequest1) in \\Serveur\d\PH_NET\ZDIVERS\Fidus_test_csharp\Fidus_test_csharp\Connected Services\TestConnectionServiceReference\Reference.cs:line 464
    at FidusExample.TestConnection.testConnection(Uri endpoint, X509Certificate2 clientCert, X509Certificate2 serverCert) in \\Serveur\d\PH_NET\ZDIVERS\Fidus_test_csharp\Fidus_test_csharp\Program.cs:line 71
    at FidusExample.TestConnection.Main(String[] args) in \\Serveur\d\PH_NET\ZDIVERS\Fidus_test_csharp\Fidus_test_csharp\Program.cs:line 36


    Que se soit en csharp ou vb.net même combat !.

    Ci dessous mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
                Uri endpoint = new Uri("https://fidus.sec.brussels/services/TestConnectionService_v1.0");
                X509Certificate2 clientCert = loadCertificate("F:/Dropbox/yyyy/wwww/ooooo/Formulaires et Certificats/Sisp/scte/Certif-prod.pfx", "xxxxxx");
                X509Certificate2 serverCert = loadCertificate("F:/Dropbox/yyyy/wwww/ooooo/mmmmm-bundle-1/ffffff-gateway/xxxxxxxx_brussels.crt", "xxxxxxx");
     
     
                testConnection(endpoint, clientCert, serverCert);
     
     
     
               private static X509Certificate2 loadCertificate(String file, String password)
               {
                   X509Certificate2 cert = new X509Certificate2();
                   cert.Import(file, password, X509KeyStorageFlags.Exportable);
                   return cert;
               }
     
     
    private static void testConnection(Uri endpoint, X509Certificate2 clientCert, X509Certificate2 serverCert)
            {
                //ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
                SecurityTokenParameters initiatorSec = new X509SecurityTokenParameters(X509KeyIdentifierClauseType.RawDataKeyIdentifier);
                SecurityTokenParameters recipientSec = new X509SecurityTokenParameters(X509KeyIdentifierClauseType.Thumbprint);
                CustomBinding binding = new CustomBinding();
                binding.Elements.Add(new AsymmetricSecurityBindingElement(recipientSec, initiatorSec));
                binding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8));
                binding.Elements.Add(new HttpsTransportBindingElement());
     
                //PRODUCTION
                EndpointAddress address = new EndpointAddress(endpoint, EndpointIdentity.CreateDnsIdentity("fidus-xxxxxxxxx.brussels"));
     
     
                TestConnectionService_v10PortTypeClient client = new TestConnectionService_v10PortTypeClient(binding, address);
                client.ClientCredentials.ClientCertificate.Certificate = clientCert;
                client.ClientCredentials.ServiceCertificate.DefaultCertificate = serverCert;
                // Trust the provider server certificate, even though it has not been signed by an official Root CA
                //client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMod = X509CertificateValidationMode.None;
                TestConnectionResponseType response = client.testConnection(createRequest());
                Console.WriteLine("Received response: " + response.testConnectionResponse);
            }
     
            private static TestConnectionRequestType createRequest()
            {
                TestConnectionRequestType request = new TestConnectionRequestType();
                request.messageContext = new RequestMessageContextType();
                request.messageContext.messageId = System.Guid.NewGuid().ToString();
                request.messageContext.timestamp = new DateTime();
                request.testConnectionRequest = "ping";
                return request;
            }
    Si une personne à une petite idée ou des pistes de recherche je suis preneur car ca fait plusieurs semaines que je cherche;-)

    Cordialement,

  2. #2
    Membre chevronné
    Avatar de nouanda
    Homme Profil pro
    Hobbyist
    Inscrit en
    Mai 2002
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Hobbyist

    Informations forums :
    Inscription : Mai 2002
    Messages : 246
    Par défaut
    Est-ce que tu pourrais aussi poster le code de la méthode TestConnectionService_v10PortTypeClient.testConnection(testConnectionRequest request), stp?
    Le problème a l'air de venir de cette méthode selon la stacktrace.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 284
    Par défaut
    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public MonProjet.TestConnectionServiceReference.TestConnectionResponseType testConnection(MonProjet.TestConnectionServiceReference.TestConnectionRequestType testConnectionRequest1)
            {
                MonProjet.TestConnectionServiceReference.testConnectionRequest inValue = new MonProjet.TestConnectionServiceReference.testConnectionRequest();
                inValue.testConnectionRequest1 = testConnectionRequest1;
                MonProjet.TestConnectionServiceReference.testConnectionResponse retVal = ((MonProjet.TestConnectionServiceReference.TestConnectionService_v10PortType)(this)).testConnection(inValue);
                return retVal.testConnectionResponse1;
            }
    Merci pour votre aide.

Discussions similaires

  1. Comment signer un fichier XML avec certificat X509 (.pfx)
    Par imad_eddine dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 08/03/2011, 10h27
  2. [Cryptographie][JNDI] Sauvegarder certificat X509
    Par Makineros63 dans le forum Sécurité
    Réponses: 2
    Dernier message: 05/05/2008, 09h05
  3. Accepter automatiquement un certificat X509
    Par kayanwan dans le forum ASP.NET
    Réponses: 3
    Dernier message: 16/11/2007, 00h41
  4. Construction de certificats X509
    Par KenPark dans le forum Sécurité
    Réponses: 2
    Dernier message: 12/07/2007, 13h50
  5. Récupérer le CN d'une certificat X509
    Par sfaxi dans le forum Apache
    Réponses: 1
    Dernier message: 30/05/2007, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo