#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. файл. Т.е. Создание объектов и свойств в кодах? Есть мысли?