Статус: Участник
Группы: Участники
Зарегистрирован: 29.12.2008(UTC) Сообщений: 22  Откуда: Краснодар Сказал «Спасибо»: 15 раз Поблагодарили: 1 раз в 1 постах
|
Написал тестовую веб-службу с авторизацией по сертификату: Цитата: [System.Web.Services.WebMethod()] public int TestMethod(int itest) { return itest*2; } Методы службы отображаются и запускаются при указании корректного сертификата, выданного на УЦ КриптоПро. Написал веб-приложение с авторизацией по сертификату для проверки этой службы (добавил соответствующий Web Reference в проект). Авторизуюсь в приложении по этому же сертификату. Передаю текущий сертификат пользователя в веб-службу: Цитата: protected void TestButton_Click(object sender, EventArgs e) { X509Certificate2 x509c = new X509Certificate2(); x509c.Import(HttpContext.Current.Request.ClientCertificate.Certificate);
testwebservice.ExpandedData ed = new testwebservice.ExpandedData(); ed.ClientCertificates.Add(x509c); Response.Write("5*2 = " + ed.TestMethod(5)); } Однако, когда вызываю метод из веб-службы возникает ошибка: Цитата:System.NotSupportedException: The certificate key algorithm is not supported. Источник ошибки: Line 95: public int TestMethod(int itest) { Line 96: object[] results = this.Invoke("TestMethod", new object[] { Line 97: itest}); Line 98: return ((int)(results[0])); Если же сертификат в веб-службу не передавать, то сообщение об ошибке меняется на: Цитата:System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. Скажите, пожалуйста, что я делаю не так? Возможна ли передача контекстного сертификата в веб-службу без использования Sharpei?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Возможна. Какой CSP? Как вызываете веб-службу? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.12.2008(UTC) Сообщений: 22  Откуда: Краснодар Сказал «Спасибо»: 15 раз Поблагодарили: 1 раз в 1 постах
|
Kirill Sobolev написал:Возможна. Какой CSP? Как вызываете веб-службу? CSP: КС1 3.0.3300.3 Вызываю веб-службу как написано выше, т.е. создаю экземпляр веб-службы и вызываю метод этой веб-службы: Код:protected void TestButton_Click(object sender, EventArgs e)
{
X509Certificate2 x509c = new X509Certificate2();
x509c.Import(HttpContext.Current.Request.ClientCertificate.Certificate);
testwebservice.ExpandedData ed = new testwebservice.ExpandedData();
ed.ClientCertificates.Add(x509c);
Response.Write("5*2 = " + ed.TestMethod(5));
}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Т.е. на самом деле веб-приложение выступает как прокси для гостового TLS с двухсторонней аутентификацией? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.12.2008(UTC) Сообщений: 22  Откуда: Краснодар Сказал «Спасибо»: 15 раз Поблагодарили: 1 раз в 1 постах
|
Kirill Sobolev написал:Т.е. на самом деле веб-приложение выступает как прокси для гостового TLS с двухсторонней аутентификацией? Да, веб-приложение выступает как прокси для гостового TLS. Вообще-то я хотел просто передать сертификат из веб-приложения в веб-службу. На мой взгляд для этого достаточно односторонней аутентификации. Или я что-то путаю?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Да, односторонний (серверной) аутентификации будет вполне достаточно, если передавать сертификат клиента не через TLS. Для двухсторонней аутентификации веб-приложению понадобится секретный ключ от HttpContext.Current.Request.ClientCertificate.Certificate, чего у него, естественно, нет. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.12.2008(UTC) Сообщений: 22  Откуда: Краснодар Сказал «Спасибо»: 15 раз Поблагодарили: 1 раз в 1 постах
|
Kirill Sobolev написал:Да, односторонний (серверной) аутентификации будет вполне достаточно, если передавать сертификат клиента не через TLS. Для двухсторонней аутентификации веб-приложению понадобится секретный ключ от HttpContext.Current.Request.ClientCertificate.Certificate, чего у него, естественно, нет. Ясно, нужно по TLS, значит все-таки меня интересует именно двухсторонняя аутентификация. Как мне заполнить поле HttpContext.Current.Request.ClientCertificate.Certificate.PrivateKey? Или нужно вообще другими компонентами пользоваться для передачи текущего сертификата клиента в из прокси в веб-службу?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Я вообще не уверен в работоспособности такой системы при условии, что веб-служба, веб-приложение и клиент - это 3 разных машины. Как вариант - сделайте клиентский сертификат для веб-приложения и именно с ним вызывайте веб-службу, передавая сертификат клиента в качестве параметра метода. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close