Я очень новичок в Nginx, и мне нужна ваша помощь / предложения для решения проблемы ниже.
Я настроил Nginx в качестве обратного прокси-сервера на Windows Server 2012 r2 и пытаюсь перенаправлять вызовы на мой внутренний сервер 'SERVERA 'всякий раз, когда делается запрос к Nginx.
Мое требование таково: мне нужно передать клиентский сертификат на сервер Nginx и, если сертификат действителен, направить вызовы на внутренний сервер' SERVERA ', иначе он должен отклонитьпозвоните в Nginx.
Я внес изменения в файл конфигурации на сервере Nginx, как показано ниже, для настройки проверки сертификации клиента.
server {
listen 443 ssl;
server_name localhost;
ssl_certificate "C:/NewCert/server.crt";
ssl_certificate_key "C:/NewCert/server.key";
ssl_client_certificate "C:/NewCert/ca.crt";
ssl_verify_client on;
location / {
root html;
index index.html index.htm;
proxy_pass https://SERVERA/MyWebService;
}
location /MyWebService {
root html;
index index.html index.htm;
proxy_pass https://SERVERA/MyWebService;
}
}
Я создал сертификаты клиента и сервера, как указано вниже опубликовано и используется то же самое для конфигурации сервера Nginx "http://nategood.com/client-side-certificate-authentication-in-ngi"
После того, как вышеупомянутая конфигурация изменяется на сервере Nginx, каждый раз, когда я пытаюсь просмотреть сервис, я получаю" 400 Bad request "" https://localhost/MyWebService"
Когда я звоню с клиента с помощью сертификата клиента на сервер Nginx, я получаю сообщение об ошибке ниже.
"{System.Net.WebException: Ошибка: SecureChannelFailure (сбой вызова SSPI, см. Внутреннее исключение.) ---> System.Security.Authentication.AuthenticationException: сбой вызова SSPI, см. Внутреннее исключение.---> Mono.Btls.MonoBtlsException: системный вызов в Mono.Btls.MonoBtlsContext.ProcessHandshake () [0x00038] в: 0 в Mono.Net.Security.MobileAuthenticatedStream.ProcessHandshake (статус Mono.Net.Security.AseOynSync).в: 0 at (обертка удаленного взаимодействия с проверкой) Mono.Net.Security.MobileAuthenticatedStream.ProcessHandshake (Mono.Net.Security.AsyncOperationStatus) в Mono.Net.Security.AsyncHandshakeRequest.Run (Mono.Net.Security.Security.Security.status) [0x00006] in: 0 at Mono.Net.Security.AsyncProtocolRequest + d__24.MoveNext () "
Ниже приведен код моего клиента
namespace Test
{
class SomeTest
{
public void SomeMethod()
{
try
{
string urlString = @"https://SERVERA/MyWebService";
MyWebClient obj = new MyWebClient();
obj.UploadData(urlString, new byte[2]);
}
catch (Exception ex)
{
string st = ex.Message;
}
}
}
class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
System.Security.Cryptography.X509Certificates.X509Certificate x509Certificate = new System.Security.Cryptography.X509Certificates.X509Certificate(@"/storage/emulated/0/nginx.crt");
request.ClientCertificates.Add(x509Certificate);
request.Method = "POST";
return request;
}
}
}
Любая помощь / предложенияс благодарностью.
Спасибо, Винод