Таким образом, я полностью потерял сертификаты. Я искал по всему Интернету решения и учебные пособия для этого и не нашел ничего, что действительно могло бы мне помочь. То, что я пытаюсь сделать, - это проверить как сервер, так и клиентский сертификат для моего клиент-серверного приложения WCF. Приложение размещено в IIS. Я хочу, чтобы это было на моем компьютере-разработчике (сервер - localhost) и в тесте (где im клиент и сервер - сервер Windows).Аутентификация сертификата клиента WCF
конфигурация у меня сейчас:
Клиент:
<behaviors>
<endpointBehaviors>
<behavior name="myBehaviorConfig">
<clientCredentials>
<clientCertificate findValue="CN=MyTestClientCertificate"
storeLocation="LocalMachine"
x509FindType="FindBySubjectDistinguishedName"/>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="MyBindingConfig">
<security mode="TransportWithMessageCredential">
<transport realm=""/>
<message clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://localhost/Service.Calculator.svc"
binding="wsHttpBinding"
bindingConfiguration="MyBindingConfig"
behaviorConfiguration="MyBehaviorConfig"
contract="Service.ICalculator"
name="ICalculatorServiceEndpoint">
<identity>
<servicePrincipalName value="host"/>
</identity>
</endpoint>
</client>
Сервер:
<behaviors>
<serviceBehaviors>
<behavior name="myBehavior">
<serviceCredentials>
<serviceCertificate findValue="CN=MyTestRootCA"
storeLocation="LocalMachine"
x509FindType="FindBySubjectDistinguishedName"/>
<userNameAuthentication userNamePasswordValidationMode="Windows"/>
<clientCertificate>
<authentication certificateValidationMode="PeerOrChainTrust"/>
</clientCertificate>
</serviceCredentials>
<serviceMetadata httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<unity operationContextEnabled="true"
instanceContextEnabled="true"
contextChannelEnabled="true"
serviceHostBaseEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="MyBinding">
<security mode="TransportWithMessageCredential">
<transport realm=""/>
<message clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="Service.Calculator"
behaviorConfiguration="myBehavior">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="MyBinding"
contract="Service.ICalculator" />
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange"
name="CalculatorServiceMex" />
</service>
</services>
"CN = MyTestRootCA" является "орган" "Создание" сертификата и я поместите его в доверенные корневые сертификаты на локальном компьютере, а также в личную директорию на локальном компьютере. И он является эмитентом клиентского сертификата «CN = MyTestClientCertificate».
Немногие вещи ..
Я знаю, что сертификат клиента должен находиться в директории CurretUser в «MMC», но когда его там у меня есть исключение, что приложение не может найти сертификат. Я попытался найти его с помощью «FindBySubjectDistinguishedName» и с «FindByThumbprint», и время было тем же самым исключением «Cant find certificate с данными критериями ...», поэтому я поместил его в LocalMachine и его штраф. У кого-нибудь есть идея, почему это не сработало?
У меня было много проблем и исключений с этим = \ токами один: «Секретный ключ не представлен в сертификате X.509» , кто знаком с этим исключением и знает, как это исправить?
Большое спасибо за ваши ответы, я сижу на этом в течение нескольких дней, теперь
Я указал местоположение хранилища сертификата клиента в конфигурации клиента. Код, который вы предлагали, должен быть в конфигурации сервера? и если да, то какой сертификат я должен указать, сертификат клиента находится на компьютере клиента. и относительно второй ошибки, у меня фактически есть закрытый ключ, и я использовал его для создания сертификата клиента, но не более того. Нужно ли мне что-то делать с этим? например, разместить его в определенном месте или добавить его в конфигурацию? – user2834816