我的开源项目有一对 .NET Core 演示应用程序,可以通过 SSL 进行通信。
当我在 Windows 上运行它们时,一切都很好。 但是当我在 Mac 上运行它们时,我收到 RemoteCertificateNameMismatch 错误。
例外情况是:
<event> Connecting to 127.0.0.1 on port 5001
<event> Remote certificate was not recognized as a valid certificate: RemoteCertificateNameMismatch
<event> Unable to perform authentication against server: The remote certificate was rejected by the provided RemoteCertificateValidationCallback.
<event> Connection failed: System.Security.Authentication.AuthenticationException: The remote certificate was rejected by the provided RemoteCertificateValidationCallback.
at System.Net.Security.SslStream.SendAuthResetSignal(ProtocolToken message, ExceptionDispatchInfo exception)
at System.Net.Security.SslStream.CompleteHandshake(SslAuthenticationOptions sslAuthenticationOptions)
at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](TIOAdapter adapter, Boolean receiveFirst, Byte[] reAuthenticationData, Boolean isApm)
at System.Net.Security.SslStream.AuthenticateAsClient(SslClientAuthenticationOptions sslClientAuthenticationOptions)
at System.Net.Security.SslStream.AuthenticateAsClient(String targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, Boolean checkCertificateRevocation)
at [a few more lines of my app code...]
...
我在每个平台上以相同的方式运行服务器/客户端对 - 相同的证书、相同的 CA 证书、相同的证书密码、客户端指向
127.0.0.1
等。
我错过了什么? Mac 在这里做了哪些不同而我没有考虑到的事情?
如果有帮助,应用程序“Executor”(服务器)和“TradeClient”(客户端)位于:https://github.com/connamara/quickfixn/tree/master/Examples
(我知道SO更喜欢内联上下文而不是链接,但我不知道什么是相关的。一旦我了解了该上下文可能是什么,我将用相关上下文修改这个问题。)
好奇心战胜了我,AFAICT,您使用的是带有
CN=QuickFixn-Server
且没有SubjectAlternativeName 扩展名的证书。 它在 mac 上失败是正确的(没有 SAN,所以与 CN 匹配,但它不匹配)...神秘的是为什么它在 Windows 上失败。
与其解决您在 Windows 上遇到的兼容性差距之谜,不如使用正确的SubjectAlternativeName 扩展名重新创建您的证书。 (由于您要连接到 127.0.0.1,因此需要将其编码为 iPAddress,而不是 dNSName)