Хранилище сертификатов WCF из базы данных SQL Server

#sql #wcf #certificate #store

#sql #wcf #сертификат #Магазин

Вопрос:

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

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

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

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

Итак, в идеале я хотел бы избавиться от «WebConfigSection» и вместо этого передать какой-то объект WCF, у которого подписан certifictate.

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


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

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

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

 proxy.ClientCredentials.ClientCertificate = __MyCertificate
  

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

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

Ответ №1:

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

Комментарии:

1. Означает ли это, что нет «обычного / менее сложного» способа достичь этого. т. Е. сертификат должен находиться в хранилище сертификатов компьютера и он должен быть объявлен в конфигурации?

2. Один из способов (‘try to’) сделать это — сделать то, что когда-либо делалось в web.config. файл. Т.е. Создание объектов и свойств в кодах? Есть мысли?