66using System . IdentityModel . Selectors ;
77using System . Runtime ;
88using System . Runtime . InteropServices ;
9+ using System . Security . Cryptography ;
910using System . Security . Cryptography . X509Certificates ;
1011
1112namespace System . ServiceModel . Security
@@ -16,6 +17,8 @@ public sealed class X509ServiceCertificateAuthentication
1617 internal const X509RevocationMode DefaultRevocationMode = X509RevocationMode . Online ;
1718 internal const StoreLocation DefaultTrustedStoreLocation = StoreLocation . CurrentUser ;
1819 private static X509CertificateValidator s_defaultCertificateValidator ;
20+ // ASN.1 description: {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) kp(3) serverAuth(1)}
21+ static readonly Oid serverAuthOid = new Oid ( "1.3.6.1.5.5.7.3.1" , "1.3.6.1.5.5.7.3.1" ) ;
1922
2023 private X509CertificateValidationMode _certificateValidationMode = DefaultCertificateValidationMode ;
2124 private X509RevocationMode _revocationMode = DefaultRevocationMode ;
@@ -44,6 +47,7 @@ internal static X509CertificateValidator DefaultCertificateValidator
4447 {
4548 bool useMachineContext = DefaultTrustedStoreLocation == StoreLocation . LocalMachine ;
4649 X509ChainPolicy chainPolicy = new X509ChainPolicy ( ) ;
50+ chainPolicy . ApplicationPolicy . Add ( serverAuthOid ) ;
4751 chainPolicy . RevocationMode = DefaultRevocationMode ;
4852 s_defaultCertificateValidator = X509CertificateValidator . CreateChainTrustValidator ( useMachineContext , chainPolicy ) ;
4953 }
@@ -130,6 +134,7 @@ internal bool TryGetCertificateValidator(out X509CertificateValidator validator)
130134 {
131135 bool useMachineContext = _trustedStoreLocation == StoreLocation . LocalMachine ;
132136 X509ChainPolicy chainPolicy = new X509ChainPolicy ( ) ;
137+ chainPolicy . ApplicationPolicy . Add ( serverAuthOid ) ;
133138 chainPolicy . RevocationMode = _revocationMode ;
134139 if ( _certificateValidationMode == X509CertificateValidationMode . ChainTrust )
135140 {
0 commit comments