Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.115.195] |
|
Сообщ.
#1
,
|
|
|
хеллоу олл.
пытаюсь организовать безопасность на транспортном уровне эксплуатируя сертификаты. пока организовываю сервис. действую по следующему алгоритму: 1. Создал сертификат ServiceCertificate c помощью makecert 2. Импортировал его в хранилище "Доверенные корневые центры сертификации" 3. Файл конфигурации службы (поведение и привязка): <behaviors> <serviceBehaviors> <behavior name="MyBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceCredentials> <serviceCertificate findValue="ServiceCertificate" x509FindType="FindBySubjectName"/> <clientCertificate> <authentication certificateValidationMode="PeerTrust"/> </clientCertificate> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors> <bindings> <netTcpBinding> <binding name ="MyBinding"> <security mode="Transport"> <transport clientCredentialType="Certificate"/> <message clientCredentialType="None"/> </security> </binding> </netTcpBinding> </bindings> Однако по факту получаю мессагу: Не удается найти сертификат X.509 с помощью следующих условий поиск. Полагаю что я напортачил с сертификатом, а конкретнее - с его размещением. Однако в чем затык - догнать не могу. Опыта с этим делом не имел. Ориентировался на msdn и на труд "Основы WCF NET 3.5". Подсобите кто чем может. |
Сообщ.
#2
,
|
|
|
Сам точно не знаю, тоже только что узна про WCF
Но вот тут написано, что "Клиентский сертификат, о котором говорилось выше, должен быть проинсталлирован в хранилище сертификатов локальной машины". Может поможет... Добавлено Еще может вот это поможет: How to call a Web service by using a client certificate for authentication in an ASP.NET Web application |
Сообщ.
#3
,
|
|
|
Цитата Felan @ Сам точно не знаю, тоже только что узна про WCF ы. Цитата Felan @ Клиентский сертификат, о котором говорилось выше, должен быть проинсталлирован в хранилище сертификатов локальной машины так и было сделано вообще все это дело попахивает полтергеем и черной магией. селезенкой чую - где то - что то - не досмотрел. |
Сообщ.
#4
,
|
|
|
Цитата mrbrooks @ <serviceCertificate findValue="ServiceCertificate" x509FindType="FindBySubjectName"/> WCF по-умолчанию ищет в Personal Certificates локальной машины - где сертификат и должен быть. Можешь указать также storeLocation="LocalMachine" и storeName="My" Если же твой сертификат действительно корневой, по-хорошему ты должен создать от него дочерний и положить в Personal Certificates. Если ты просто хотел, чтобы оно не ругалось на самоподписанный серт, можно или добавить твой в два хранилища или переключить storeLocation и storeName или отключить проверку центра сертификации. |
Сообщ.
#5
,
|
|
|
Цитата mrbrooks @ ы. Это я не к тому, что от тебя первый раз услышал, а к тому, что тоже разбираюсь сейчас с подобными вещами... |
Сообщ.
#6
,
|
|
|
spicard я делал и так:
<behaviors> <serviceBehaviors> <behavior name="MyBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceCredentials> <serviceCertificate findValue="ServiceCertificate" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/> <clientCertificate> <authentication certificateValidationMode="PeerTrust"/> </clientCertificate> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors> <bindings> <netTcpBinding> <binding name ="MyBinding"> <security mode="Transport"> <transport clientCredentialType="Certificate"/> <message clientCredentialType="None"/> </security> </binding> </netTcpBinding> </bindings> все одно не находит. Цитата spicard @ Если же твой сертификат действительно корневой, по-хорошему ты должен создать от него дочерний и положить в Personal Certificates. это про самозаверяющий сертификат корневого центра и сертификат, подписанный сертификатом корневого центра? (терминология ms) если да - то комплитед. Цитата spicard @ Если же твой сертификат действительно корневой, по-хорошему ты должен создать от него дочерний и положить в Personal Certificates Вот отсюда поподробнее. Я импортировал сертификаты через тузлу Сертификаты. По поводу Personal Certificates ничего похожего не нашел. Имеется ввиду Сертификаты текущего пользователя? Цитата Felan @ Это я не к тому, что от тебя первый раз услышал, а к тому, что тоже разбираюсь сейчас с подобными вещами... дык я так и понял, что вместе грызем гранит wcf |
Сообщ.
#7
,
|
|
|
выполни win+r certmgr.msc
Там увидишь дерево хранилища. Видимо имеется ввиду папочка Personal... при установке сертификата надо выбрать "выбор места в ручную" и т.д... |
Сообщ.
#8
,
|
|
|
Цитата mrbrooks @ это про самозаверяющий сертификат корневого центра и сертификат, подписанный сертификатом корневого центра? (терминология ms) если да - то комплитед. похоже на то, ок Цитата mrbrooks @ Вот отсюда поподробнее. Я импортировал сертификаты через тузлу Сертификаты. По поводу Personal Certificates ничего похожего не нашел. Имеется ввиду Сертификаты текущего пользователя? Юзай Microsoft Management Console (Пуск -> Выполнить -> mmc) и найди там Certificates(Local Computer)\Personal\Certificates. "Сертификаты текущего пользователя" не то, но рядом. Кроме того, если у тебя в операционке включены ACL, то тебе необходимо будет раздать права на чтение сертификата. Если сервис хостится IIS`ом и настройки пула стоят по-умолчанию, то до IIS 7.5 система лезет туда как NETWORK SERVICE. |
Сообщ.
#9
,
|
|
|
Цитата spicard @ Юзай Microsoft Management Console (Пуск -> Выполнить -> mmc) и найди там Certificates(Local Computer)\Personal\Certificates. "Сертификаты текущего пользователя" не то, но рядом. а все понял. да так и делал. маздай то русский. папка Личные (а я пихал в "Доверенные корневые центры сертификации"). Туда сертификат и добавил. Лол. Лед тронулся. Теперь правда ругается так: Цитата Сертификат "CN=ServiceCertificate" должен иметь закрытый ключ, поддерживающий обмен ключами. Процесс должен иметь права доступа к этому закрытому ключу Но главное процесс пошел!!! Цитата spicard @ Если сервис хостится IIS`ом и настройки пула стоят по-умолчанию, то до IIS 7.5 система лезет туда как NETWORK SERVICE. не. служба у меня по верх tcp Цитата Felan @ выполни win+r certmgr.msc через mmc то же самое. |
Сообщ.
#10
,
|
|
|
Цитата mrbrooks @ Сертификат "CN=ServiceCertificate" должен иметь закрытый ключ, поддерживающий обмен ключами. Процесс должен иметь права доступа к этому закрытому ключу Ок, открой свой сертификат и скажи видишь ли ты внизу на первой вкладке надпись "You have a private key that corresponds to this certificate" (на русском не процитирую)? Если она есть, то или сервис требует, чтобы при импорте сертификата закрытый ключ был помечен как экспортируемый (никак не могу вспомнить зачем) или у процесса нет прав на его чтение. Цитата mrbrooks @ Цитата spicard @ Если сервис хостится IIS`ом и настройки пула стоят по-умолчанию, то до IIS 7.5 система лезет туда как NETWORK SERVICE. не. служба у меня по верх tcp Одно другому не мешает... А кто тогда хостит сервис? Windows Service или десктопное приложение? На какой операционке? |
Сообщ.
#11
,
|
|
|
Цитата spicard @ Ок, открой свой сертификат и скажи видишь ли ты внизу на первой вкладке надпись "You have a private key that corresponds to this certificate" (на русском не процитирую)? есть такое Цитата spicard @ Если она есть, то или сервис требует, чтобы при импорте сертификата закрытый ключ был помечен как экспортируемый (никак не могу вспомнить зачем) или у процесса нет прав на его чтение. я правильно понимаю что это борется через winhttpcertcfg? Цитата spicard @ А кто тогда хостит сервис? Windows Service или десктопное приложение? На какой операционке? авторазмещение. winxp. я пока тренируюсь. в перспективе WinServer 2003. |
Сообщ.
#12
,
|
|
|
Цитата mrbrooks @ я правильно понимаю что это борется через winhttpcertcfg? Да, но я делал руками в mmc. В случае с галочкой экспорта - проще удалить сертификат из хранилища и импортировать заново. Цитата mrbrooks @ авторазмещение. winxp. я пока тренируюсь. в перспективе WinServer 2003. В WinXP если ACL выключен настройка прав доступа не требуется. |
Сообщ.
#13
,
|
|
|
Цитата spicard @ Да, но я делал руками в mmc. В случае с галочкой экспорта - проще удалить сертификат из хранилища и импортировать заново. сделал. как говорится воз и нынче там на самом деле не понимаю почему ошибка - сертификат сконфигурирован с ключем -pe. по мануалом все должно быть чики-пуки Цитата spicard @ В WinXP если ACL выключен настройка прав доступа не требуется. если ACL включена то в свойствах файла появляется вкладка Безопасность? |
Сообщ.
#14
,
|
|
|
Цитата mrbrooks @ если ACL включена то в свойствах файла появляется вкладка Безопасность? Да. Цитата mrbrooks @ сделал. как говорится воз и нынче там на самом деле не понимаю почему ошибка - сертификат сконфигурирован с ключем -pe. по мануалом все должно быть чики-пуки Еще одна версия - сертификат должен быть импортирован в хранилище без пароля. |
Сообщ.
#15
,
|
|
|
Цитата spicard @ Еще одна версия - сертификат должен быть импортирован в хранилище без пароля. так точно. ситуация не переменилась. причем я пытался пофиксить тему с ключем при помощи: 1. FindPrivateKey + cacls.key - не помогло 2. WinHttpCertCfg - не помогло |
Сообщ.
#16
,
|
|
|
В таком случае ошибка была допущена или при создании сертификата или в процессе настройки. Я могу вечером собрать на XP`шке пример и описать свои шаги.
|
Сообщ.
#17
,
|
|
|
Цитата spicard @ В таком случае ошибка была допущена или при создании сертификата наверно так и есть. делал так: самозаверяющий сертификат корневого центра: Цитата makecert.exe -n "CN=BaseCert" -r -sv BaseCert.pvk BaseCert.cer сертификат, подписанный сертификатом корневого центра: Цитата makecert.exe -sk ChildCert -iv BaseCert.pvk -pe -n "CN=ChildCert" -ic BaseCert.cer ChildCert.cer -sr localmachine -ss my Цитата spicard @ Я могу вечером собрать на XP`шке пример и описать свои шаги. был бы очень признателен. |
Сообщ.
#18
,
|
|
|
В сертификате прописывается адрес для которого он выдан... У тебя правильный адрес там прописан?
|
Сообщ.
#19
,
|
|
|
Цитата Felan @ В сертификате прописывается адрес для которого он выдан... У тебя правильный адрес там прописан? эм. не могли бы вы уточнить о каком адресе идет речь? об transport://ip:port/nameservice? |
Сообщ.
#20
,
|
|
|
Ну вот поклясться не могу, но по идее об адресе, который находится в Issued To.
Цитата mrbrooks @ transport://ip:port/nameservice? У меня там просто домен. Ну точнее доменное имя. По крайней мере у меня там прописан адрес, на который идет соединение, и сертификат нашелся при таком конфиге: <endpointBehaviors> <behavior name="clientEndpointCredential"> <clientCredentials> <clientCertificate storeName="My" storeLocation="CurrentUser" x509FindType="FindBySubjectName" findValue="blah-blah..." /> <!-- <serviceCertificate>--> <!-- <authentication certificateValidationMode="ChainTrust" revocationMode="NoCheck"/>--> <!-- </serviceCertificate>--> </clientCredentials> </behavior> </endpointBehaviors> У меня хуже Сервис который мне нужен по хттпс требует авторизацию согласно OASIS... никак не могу скормить ему правильную конфигурацию... |
Сообщ.
#21
,
|
|
|
Felan я так понимаю вы показали конфигурационный файл клиента?
|
Сообщ.
#22
,
|
|
|
Да.
|