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: