Postupy: Konzistentní odkazy na certifikáty X.509

Certifikát můžete identifikovat několika způsoby: hodnotou hash certifikátu, vystavitelem a sériovým číslem nebo identifikátorem klíče subjektu (SKI). Ski poskytuje jedinečnou identifikaci veřejného klíče subjektu certifikátu a často se používá při práci s digitálním podpisem XML. Hodnota SKI je obvykle součástí certifikátu X.509 jako rozšíření certifikátu X.509. Windows Communication Foundation (WCF) má výchozí styl odkazování, který používá vystavitele a sériové číslo, pokud v certifikátu chybí rozšíření SKI. Pokud certifikát obsahuje rozšíření SKI, použije výchozí styl odkazování ski k nasměrování na certifikát. Pokud se ve středu vývoje aplikace přepnete z používání certifikátů, které nepoužívají rozšíření SKI, na certifikáty, které používají rozšíření SKI, změní se také odkazující styl použitý ve zprávách generovaných wcf.

Pokud je vyžadován konzistentní styl odkazování bez ohledu na přítomnost rozšíření SKI, je možné nakonfigurovat požadovaný styl odkazování, jak je znázorněno v následujícím kódu.

Příklad

Následující příklad vytvoří vlastní prvek vazby zabezpečení, který používá jeden konzistentní odkazující styl, název vystavitele a sériové číslo.

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

Probíhá kompilace kódu

Ke kompilaci kódu se vyžadují následující obory názvů:

Viz také