Commit 6252d90e authored by Marc Gravell's avatar Marc Gravell

add log info for when we get invalid certs from azure

parent 38f98946
...@@ -48,7 +48,8 @@ internal static ConnectionMultiplexer GetWithFT(ITestOutputHelper output) ...@@ -48,7 +48,8 @@ internal static ConnectionMultiplexer GetWithFT(ITestOutputHelper output)
var options = new ConfigurationOptions var options = new ConfigurationOptions
{ {
EndPoints = { ep }, EndPoints = { ep },
AllowAdmin = true AllowAdmin = true,
SyncTimeout = 15000,
}; };
var conn = ConnectionMultiplexer.Connect(options); var conn = ConnectionMultiplexer.Connect(options);
......
...@@ -2,8 +2,10 @@ ...@@ -2,8 +2,10 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks; using System.Threading.Tasks;
using StackExchange.Redis.Tests.Helpers;
using Xunit; using Xunit;
using Xunit.Abstractions; using Xunit.Abstractions;
...@@ -23,6 +25,7 @@ public void ConnectToAzure(int? port, bool ssl) ...@@ -23,6 +25,7 @@ public void ConnectToAzure(int? port, bool ssl)
Skip.IfNoConfig(nameof(TestConfig.Config.AzureCachePassword), TestConfig.Current.AzureCachePassword); Skip.IfNoConfig(nameof(TestConfig.Config.AzureCachePassword), TestConfig.Current.AzureCachePassword);
var options = new ConfigurationOptions(); var options = new ConfigurationOptions();
options.CertificateValidation += ShowCertFailures(Writer);
if (port == null) if (port == null)
{ {
options.EndPoints.Add(TestConfig.Current.AzureCacheServer); options.EndPoints.Add(TestConfig.Current.AzureCacheServer);
...@@ -330,12 +333,58 @@ public void SSLParseViaConfig_Issue883_ConfigObject() ...@@ -330,12 +333,58 @@ public void SSLParseViaConfig_Issue883_ConfigObject()
EndPoints = { { TestConfig.Current.AzureCacheServer, 6380 } }, EndPoints = { { TestConfig.Current.AzureCacheServer, 6380 } },
Password = TestConfig.Current.AzureCachePassword Password = TestConfig.Current.AzureCachePassword
}; };
options.CertificateValidation += ShowCertFailures(Writer);
using (var conn = ConnectionMultiplexer.Connect(options)) using (var conn = ConnectionMultiplexer.Connect(options))
{ {
conn.GetDatabase().Ping(); conn.GetDatabase().Ping();
} }
} }
public static RemoteCertificateValidationCallback ShowCertFailures(TextWriterOutputHelper output) {
if (output == null) return null;
return (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) =>
{
void WriteStatus(X509ChainStatus[] status)
{
if (status != null)
{
for (int i = 0; i < status.Length; i++)
{
var item = status[i];
output.WriteLine($"\tstatus {i}: {item.Status}, {item.StatusInformation}");
}
}
}
lock (output)
{
if (certificate != null)
{
output.WriteLine($"Subject: {certificate.Subject}");
}
output.WriteLine($"Policy errors: {sslPolicyErrors}");
if (chain != null)
{
WriteStatus(chain.ChainStatus);
var elements = chain.ChainElements;
if (elements != null)
{
int index = 0;
foreach (var item in elements)
{
output.WriteLine($"{index++}: {item.Certificate.Subject}; {item.Information}");
WriteStatus(item.ChainElementStatus);
}
}
}
}
return sslPolicyErrors == SslPolicyErrors.None;
};
}
[Fact] [Fact]
public void SSLParseViaConfig_Issue883_ConfigString() public void SSLParseViaConfig_Issue883_ConfigString()
{ {
...@@ -344,6 +393,7 @@ public void SSLParseViaConfig_Issue883_ConfigString() ...@@ -344,6 +393,7 @@ public void SSLParseViaConfig_Issue883_ConfigString()
var configString = $"{TestConfig.Current.AzureCacheServer}:6380,password={TestConfig.Current.AzureCachePassword},connectRetry=3,connectTimeout=5000,syncTimeout=5000,defaultDatabase=0,ssl=true,abortConnect=false"; var configString = $"{TestConfig.Current.AzureCacheServer}:6380,password={TestConfig.Current.AzureCachePassword},connectRetry=3,connectTimeout=5000,syncTimeout=5000,defaultDatabase=0,ssl=true,abortConnect=false";
var options = ConfigurationOptions.Parse(configString); var options = ConfigurationOptions.Parse(configString);
options.CertificateValidation += ShowCertFailures(Writer);
using (var conn = ConnectionMultiplexer.Connect(options)) using (var conn = ConnectionMultiplexer.Connect(options))
{ {
conn.GetDatabase().Ping(); conn.GetDatabase().Ping();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment