Не удается пройти проверку подлинности на сервере Identity Server. Ошибка рукопожатия. - PullRequest
0 голосов
/ 22 апреля 2019

Фон. Мне нужно, чтобы мой сайт проходил аутентификацию через IdentityServer (IDS). "example.com"

Я создаю все свои сайты с DotNetCore Разместив их на прокси-сервере с помощью apache, назовем приватный ip 12.3.4.5.

Как они должны работать. Я захожу на сайт example.com. Я должен поговорить с ids.exampe.com, получить информацию об аутентификации, а затем перенаправиться обратно на example.com с токеном авторизации. Вместо этого я получаю ошибку рукопожатия SSL. Смотри ниже.

Я специально прошу помощи в том, чтобы заставить сайты доверять друг другу.

Однако, если я попытаюсь пройти аутентификацию, перейдя непосредственно на сайт IDS, никаких проблем !! Золотой! Таким образом, как вы можете видеть, только когда я пытаюсь связаться между сайтами, я получаю эту проблему.

An unhandled exception occurred while processing the request.
OpenSslCryptographicException: error:14094410:SSL 
routines:ssl3_read_bytes:sslv3 alert handshake failure
Unknown location

SslException: SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL.
Interop+OpenSsl.DoSslHandshake(SafeSslHandle context, byte[] recvBuf, int 
recvOffset, int recvCount, out byte[] sendBuf, out int sendCount)

AuthenticationException: Authentication failed, see inner exception.
System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken 
message, AsyncProtocolRequest asyncRequest, ExceptionDispatchInfo 
exception)

HttpRequestException: The SSL connection could not be established, see 
inner exception.
System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream 
stream, SslClientAuthenticationOptions sslOptions, CancellationToken 
cancellationToken)

IOException: IDX20804: Unable to retrieve document from: 
'https://ids.example.com/.well-known/openid-


 configuration'.Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocu 
mentAsync(string address, CancellationToken cancel)

InvalidOperationException: IDX20803: Unable to obtain configuration from: 
'https://ids.example.com/.well-known/openid-configuration'.

Microsoft.IdentityModel.Protocols.ConfigurationManager.GetConfigurationAsyn c (CancellationToken cancel)

httpd.conf ::

# ServerRoot "/ etc / httpd" LoadModule proxy_module modules / mod_proxy.so LoadModule proxy_http_module modules / mod_proxy_http.so LoadModule ssl_module modules / mod_ssl.so

<VirtualHost *:*>
  RequestHeader set X-Forwarded-Proto "%{REQUEST_SCHEME}s"
</VirtualHost>


<VirtualHost *:443>
 ServerName ids.example.com
 SSLEngine on
 SSLProxyEngine on
 SSLProtocol all -SSLv2
 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!RC4+RSA:+HIGH:+MEDIUM:!LOW:!RC4
 SSLProxyVerify none 
 SSLProxyCheckPeerCN off
 SSLProxyCheckPeerName off

 SSLProxyCheckPeerExpire off

 SSLCertificateKeyFile /etc/httpd/ssl/example.key 
 SSLCertificateFile    /etc/httpd/ssl/example.crt
 SSLVerifyClient require
 SSLVerifyDepth 10
 SSLCACertificateFile /etc/httpd/ssl/DoD_CAs.pem
 SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
 ProxyPreserveHost on

 ProxyPass                   /       http://x.x.x.x:5008/
 ProxyPassReverse         /       http://x.x.x.x:5008/

</VirtualHost>



 # Main Site VirtualHost
<VirtualHost *:443>
 ServerName example.com
# SSL settings
 SSLEngine on
 SSLProxyEngine on
 SSLProtocol all -SSLv2
 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!RC4+RSA:+HIGH:+MEDIUM:!LOW:!RC4
 SSLProxyVerify none 
 SSLProxyCheckPeerCN off
 SSLProxyCheckPeerName off
 SSLProxyCheckPeerExpire off
 SSLCertificateKeyFile /etc/httpd/ssl/example.key
 SSLCertificateFile    /etc/httpd/ssl/example.crt
# Client Verification
 SSLVerifyClient require
 SSLVerifyDepth 10
 SSLCACertificateFile /etc/httpd/ssl/DoD_CAs.pem
 RequestHeader set X-ARR-ClientCert "%{SSL_CLIENT_S_DN}s"
 SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
# Redirects
 ProxyPreserveHost on
 ProxyPass                /       http://x.x.x.x:5022/
 ProxyPassReverse         /       http://x.x.x.x:5022/
</VirtualHost>

1 Ответ

0 голосов
/ 23 апреля 2019

Ошибка была в файле http.conf

Я использовал директиву SSLCACertificateFile, когда должен был использовать Директива SSLCACertificatePath ...

По сути, я мог проходить проверку подлинности с помощью DOD CAC pki, но как только основное приложение dot.net попыталось отправить данные с одного сервера на другой, возникла ошибка рукопожатия, поскольку сайты использовали самозаверяющие подписи. засвидетельствовано Мой сертификат был в правильном месте все время, однако он не доверял ему, потому что директива SSLCACertificateFile говорит только доверять этому, а не доверять всему в этом каталоге.

Also my network guy recomends that in the future, it's a best practice to use the 
SSLCAcertificateFile, but to then combine your certs into one.

Я действительно надеюсь, что это спасет кого-то еще, что я только что сделал, хотя ... У меня были проблемы с этим в течение 40 часов или около того. Переход от конфиг-файлов к изменениям базы кода ...

...