Heartbleed が原因で、ゲートウェイサーバーが更新され、この問題が発生しました。
[〜#〜] poodle [〜#〜] のため、SSLv3はサポートされなくなりました。
クライアントアプリケーション(.NET 2.0)は、Windows 7(または8)ボックスにあります。サーバーはゲートウェイサーバーの背後にあるDMZ更新の。
ゲートウェイサーバーは、SSLを使用するApacheHTTPサーバーが実行されるパススルーボックスです。その場所はDMZの外側にあり、DMZの内側にあるサーバーにアクセスするために使用されます。ゲートウェイサーバーで実行されているソフトウェアのバージョンは、Apache/2.2.25(Win32)、mod_jk/1.2.39、mod_ssl/2.2.25、OpenSSL /1.0.1gです。
これは、クライアントアプリケーションで使用されるコードです(膨大な量のログが追加されています)...注:「serverName」には通常、「 https://some.url.com "」などの値が含まれます。
private bool ConnectAndAuthenicate(string serverName, out TcpClient client, out SslStream sslStream)
{
client = null;
sslStream = null;
try
{
client = new TcpClient(serverName, 443); // Create a TCP/IP client; ctor attempts connection
Log("ConnectAndAuthenicate: Client CONNECTED"));
sslStream = new SslStream(client.GetStream(), false, ValidateServerCertificate, null);
Log("ConnectAndAuthenicate: SSL Stream CREATED"));
}
catch (Exception x)
{
Log("ConnectAndAuthenicate: EXCEPTION >> CONNECTING to server: {0}", x.ToString()));
if (x is SocketException)
{
SocketException s = x as SocketException;
Log("ConnectAndAuthenicate: EXCEPTION >> CONNECTING to server: Socket.ErrorCode: {0}", s.ErrorCode));
}
if (client != null) { client.Close(); client = null; }
if (sslStream != null) { sslStream.Close(); sslStream = null; }
}
if (sslStream == null) return false;
try
{
sslStream.ReadTimeout = 10000; // wait 10 seconds for a response ...
Log("ConnectAndAuthenicate: AuthenticateAsClient CALLED ({0})", serverName));
sslStream.AuthenticateAsClient(serverName);
Log("ConnectAndAuthenicate: AuthenticateAsClient COMPLETED SUCCESSFULLY"));
return true;
}
catch (Exception x)
{
Log("ConnectAndAuthenicate: EXCEPTION >> AuthenticateAsClient: {0}", x.ToString()));
client.Close(); client = null;
sslStream.Close(); sslStream = null;
}
return false;
}
注- 投稿された回答 ServicePointManagerに関連するものは、このアプリケーションの結果にまったく影響しません。
アプリケーションがWin7 +ボックスで実行されているときにAuthenicateAsClient()が呼び出されるたびに、例外が発生します。アプリケーションがWinXPボックスで実行されている場合、コードは例外なく正しく機能します。
ソリューションのアイデアは大歓迎です。
ServicePointManager.SecurityProtocol static ctorを SecurityProtocolType で設定した後、SslPolicyと呼ばれる別の列挙型についての言及が見つかりました-さらなる調査により、 AuthenicateAsClientにはオーバーロード SslPolicyを引数として取ります。
上記のコードでこの行を変更すると、この問題が修正されました。
sslStream.AuthenticateAsClient(serverName, null, SslPolicy.Tls, false);