Udostępnij za pośrednictwem


Instrukcje: Spójne odwoływanie się do certyfikatów X.509

Certyfikat można zidentyfikować na kilka sposobów: przy użyciu skrótu certyfikatu, wystawcy i numeru seryjnego lub identyfikatora klucza podmiotu (SKI). Ski zapewnia unikatową identyfikację podmiotu klucza publicznego certyfikatu i jest często używany podczas pracy z podpisywaniem cyfrowym XML. Wartość SKI jest zwykle częścią certyfikatu X.509 jako rozszerzenia certyfikatu X.509. Program Windows Communication Foundation (WCF) ma domyślny styl odwołujący się do wystawcy i numeru seryjnego, jeśli w certyfikacie brakuje rozszerzenia SKI. Jeśli certyfikat zawiera rozszerzenie SKI, domyślny styl odwoływania się do certyfikatu używa ski. Jeśli w połowie procesu tworzenia aplikacji przełączysz się z używania certyfikatów, które nie używają rozszerzenia SKI do certyfikatów korzystających z rozszerzenia SKI, styl odwołania używany w komunikatach generowanych przez program WCF również ulega zmianie.

Jeśli wymagany jest spójny styl odwoływania się niezależnie od obecności rozszerzenia SKI, można skonfigurować żądany styl odwoływania się, jak pokazano w poniższym kodzie.

Przykład

Poniższy przykład tworzy niestandardowy element powiązania zabezpieczeń, który używa pojedynczego spójnego stylu odwoływania się, nazwy wystawcy i numeru seryjnego.

public Binding CreateClientBinding()
{
    AsymmetricSecurityBindingElement abe =
        (AsymmetricSecurityBindingElement)SecurityBindingElement.
        CreateMutualCertificateBindingElement(
        MessageSecurityVersion.
        WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10);

    abe.SetKeyDerivation(false);

    X509SecurityTokenParameters istp =
       abe.InitiatorTokenParameters as X509SecurityTokenParameters;
    if (istp != null)
    {
        istp.X509ReferenceStyle =
        X509KeyIdentifierClauseType.IssuerSerial;
    }
    X509SecurityTokenParameters rstp =
    abe.RecipientTokenParameters as X509SecurityTokenParameters;
    if (rstp != null)
    {
        rstp.X509ReferenceStyle =
        X509KeyIdentifierClauseType.IssuerSerial;
    }

    HttpTransportBindingElement transport =
        new HttpTransportBindingElement();

    return new CustomBinding(abe, transport);
}
Public Function CreateClientBinding() As Binding

    Dim abe As AsymmetricSecurityBindingElement = CType(SecurityBindingElement.CreateMutualCertificateDuplexBindingElement _
        (MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10), _
        AsymmetricSecurityBindingElement)

    abe.SetKeyDerivation(False)

    Dim istp As X509SecurityTokenParameters = TryCast(abe.InitiatorTokenParameters, X509SecurityTokenParameters)

    If istp IsNot Nothing Then
        istp.X509ReferenceStyle = X509KeyIdentifierClauseType.IssuerSerial
    End If

    Dim rstp As X509SecurityTokenParameters = TryCast(abe.RecipientTokenParameters, X509SecurityTokenParameters)
    If rstp IsNot Nothing Then
        rstp.X509ReferenceStyle = X509KeyIdentifierClauseType.IssuerSerial
    End If

    Return New CustomBinding(abe, New HttpTransportBindingElement())
End Function

Kompilowanie kodu

Do skompilowania kodu wymagane są następujące przestrzenie nazw:

Zobacz też