現在、WCFSOAPメッセージ用に提示された証明書に対して一連のルールを検証するカスタムX509CertificateValidatorがあります。
証明書が提示されているドメインに対して証明書のCN名を確認する必要がありますが、X509CertificateValidator内から要求にアクセスできることを認識していません。
証明書がリクエストドメインと一致することを確認する方法はありますか?
現在、WCFSOAPメッセージ用に提示された証明書に対して一連のルールを検証するカスタムX509CertificateValidatorがあります。
証明書が提示されているドメインに対して証明書のCN名を確認する必要がありますが、X509CertificateValidator内から要求にアクセスできることを認識していません。
証明書がリクエストドメインと一致することを確認する方法はありますか?
X509CertificateValidator内からこれを行う方法は見つかりませんでしたが、サービス内で可能です。
これが私の最初のカットです-よりエレガントにするためにそれを改良しますが、これはうまくいきます。
private static void ValidateRequestIsFromCertificateDomain()
{
RemoteEndpointMessageProperty endpointProperty = OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
var claimSet = OperationContext.Current.ServiceSecurityContext.AuthorizationContext.ClaimSets[0] as X509CertificateClaimSet;
string domain = claimSet.X509Certificate.GetNameInfo(X509NameType.DnsName, false);
var resolvedAddress = System.Net.Dns.GetHostAddresses(domain);
if (resolvedAddress.Count() == 0 || endpointProperty.Address != resolvedAddress[0].ToString())
{
throw new SecurityException("Client address mismatch");
}
}
クライアントは公開鍵でのみ復号化できる秘密鍵でデータを暗号化するため、これは実際には必要ありません。したがって、証明書が実際のクライアントによって提示されていることがわかります。
ただし、これまでのように統合要件としてこれが与えられている場合は、これが役立つ可能性があります。