Хранилище сертификатов WCF из базы данных SQL Server - PullRequest
3 голосов
/ 12 мая 2011

У меня есть база данных SQL, в которой хранится мой клиентский сертификат для службы WCF и других служб. (X509 и т. Д.). Я хотел бы использовать этот магазин (вместо «Мой») для получения этого сертификата (вместо объявления его в web.config), а затем использовать его для WCF.

Я попытался выполнить поиск на этом сайте и в Google, но, похоже, это не очень помогает.

В настоящее время я делаю

 var targetEndpoint = new EndpointAddress(targetLogicalAddress, targetIdentity);
 MyTransportPortTypesClient proxy = new MyTransportPortTypesClient("WebConfigSection", targetEndpoint);

Так что в идеале я хотел бы избавиться от "WebConfigSection" и вместо этого передать какой-то объект WCF с сертификатом со знаком.

Кто-нибудь знает, как этого добиться?


Я наконец-то решил это, и вот как я это сделал. (Я поделюсь своим опытом, чтобы каждый мог его использовать) Это без использования какого-либо компьютера CertificateStore. Это чисто из базы данных на клиентский прокси.

Я создал объект X509Certificate2 и назначил физический файл (в байтах []). Вы также можете поставить пароль, если его пароль защищен.

Затем я назначил сертификат моему прокси-клиенту. Что-то вроде:

proxy.ClientCredentials.ClientCertificate = __MyCertificate

Теперь я манипулировал своим clientproxy, как я и предполагал, в моем app.config. и это все. Все эти свойства будут в вашем прокси-объекте.

Надеюсь, это поможет.

1 Ответ

1 голос
/ 13 мая 2011

AFAIK это по крайней мере очень трудно, если не прямо вниз невозможно. WCF использует для аутентификации SChannel SSPI , и этот поставщик SSPI будет загружать сертификаты только от SChannel CSP . Чтобы использовать сертификат из базы данных, сертификат должен быть сначала загружен в PROV_RSA_SCHANNEL CSP хранилище ключей, а затем контекст сертификата этого хранилища ключей будет передан в AcquireCredentialsHandle. Например, именно так зеркальное отображение базы данных может проходить аутентификацию, используя сертификат, хранящийся в базе данных . Хотя все эти шаги можно выполнить и в управляемом коде, я не уверен, возможно ли подключить их к WCF: я ожидаю, что это так, но, вероятно, не для слабонервных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...