У меня есть два сервера WCF, оба в домене mydomain.com (вымышленный пример, как и IP ниже!), Соответственно с именами server1 и server2.
Они оба доступны через свои общедоступные IP-адреса (foo.1 и 2), но также и из частной локальной сети, в которой они находятся (т.е. 192.168.0.1 и 192.168.0.2)
У меня есть подстановочный сертификат ssl для * .mydomain.com. Он правильно установлен в соответствующих хранилищах (например, Personal для шифрования и Trusted Clients для аутентификации)
Я бы хотел, чтобы оба моих сервера соединялись друг с другом по своим адресам в локальной сети, используя мой групповой сертификат для проверки подлинности.
Я обновил файл C: \ Windows \ System32 \ drivers \ etc \ hosts, чтобы он выглядел следующим образом:
192.168.0.1 Server1.mydomain.com
192.186.0.2 Server2.mydomain.com
Это не те IP-адреса, которые я получаю, если разрешу Server1.mydomain.com (я бы предпочел получить foo.1 - 2)
Я также отредактировал DNS-суффикс подключения для локальных интерфейсов IPV4 на «mydomain.com»
Мой сертификат упоминается как это в моих файлах Server.config (я удалил все части, не связанные с аутентификацией)
<behavior name="ServerToServerBehavior" >
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="Online"/>
</clientCertificate>
<serviceCertificate x509FindType="FindByThumbprint" findValue="13a41b3456e431131cd461de"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="myServerAsClientBehaviorConfiguration">
<clientCredentials>
<clientCertificate x509FindType="FindByThumbprint" findValue="13a41b3456e431131cd461de" storeLocation="LocalMachine"/>
<serviceCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="Online" trustedStoreLocation="LocalMachine"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
Это прекрасно работает на моем собственном компьютере разработчика с локально сгенерированными сертификатами X509, но в моей производственной среде вот что я получаю:
Server.Connect: не удалось подключиться к
сервер Server2:
System.ServiceModel.Security.MessageSecurityException:
Проверка подлинности не удалась для исходящих
сообщение. Ожидаемая идентичность DNS
удаленная конечная точка была
'server2.mydomain.com', но удаленный
конечная точка предоставила претензию DNS
'Mydomain.com. Если это
законная удаленная конечная точка, вы можете
исправить проблему явно
указание DNS-идентификатора «mydomain.com»
как свойство идентичности
EndpointAddress при создании канала
прокси.
Я пытался заставить сервер отвечать на Server2.mydomain.com вместо просто mydomain.com, но безуспешно. Любой намек на то, как это сделать?
Я также попробовал решение, предложенное в сообщении об ошибке, но, похоже, это никак не отразилось (другие пользователи, похоже, имеют ту же проблему , и я пока не нашел решения) , Есть идеи как это исправить?
Редактировать:
Я проверил у своего поставщика сертификатов, действительно ли я могу использовать его для аутентификации X509.