共用方式為


作法:一律參考 X.509 憑證

您可以用幾種方式來識別憑證:依據憑證的雜湊、依據簽發者和序號,或是依據主體金鑰識別元 (SKI)。 SKI 會提供憑證之主體公開金鑰的唯一識別,而且通常會在使用 XML 數位簽章時使用。 SKI 值通常是 X.509 憑證的一部分,作為 X.509 憑證延伸。 Windows Communication Foundation (WCF) 具有預設的參考樣式,此參考樣式會在憑證遺失 SKI 延伸時使用簽發者和序號。 如果憑證包含 SKI 延伸,預設的參考樣式便會使用 SKI 來指向憑證。 如果您原本使用的是不用 SKI 延伸的憑證,但在開發應用程式的期間,切換到使用 SKI 延伸的憑證,在 WCF 產生的訊息中所使用的參考樣式也會變更。

如果無論 SKI 延伸是否存在都必須使用一致的參考樣式,這時就可以設定需要的參考樣式,如下列程式碼所示。

範例

下列範例會建立自訂的安全性繫結項目,該項目會使用單一的一致參考樣式、簽發者名稱及序號。

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

編譯程式碼

要編譯程式碼時,必須有下列命名空間:

另請參閱