由于Heartbleed,我们的网关服务器已更新,此问题出现了.
由于POODLE,不再支持SSLv3.
客户端应用程序(.NET 2.0)位于Windows 7(或8)框中.服务器在网关服务器后面的DMZ内运行.请注意,我发现.NET 4.0+上不再存在这个问题 - 但是由于遗留代码,我没有更新的奢侈.
Gateway Server是一个传递框,运行带有SSL的Apache HTTP Server.它的位置在DMZ之外,用于访问DMZ内部的服务器.在Gateway服务器上运行的软件版本是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: …Run Code Online (Sandbox Code Playgroud) 此查询有效; 也就是说,它返回预期的结果:
var r = sql.Query<T>("select * from TableName where Name = '" + name + "'");
Run Code Online (Sandbox Code Playgroud)
但是,如果其中一个'名称'值包含一个萎缩(这是真的),那么会在'资源'附近抛出一个异常'{"语法错误.\ r \n在字符串''后面有一个未引用的引号."}}' - 为了解决这个问题,我的查询不再返回任何结果; 但它应该.
我试图通过几种方式更改代码,但不会返回以下任何一项更改的结果:
var r = sql.Query<T>("select * from TableName where Name = '@name'", new { name });
Run Code Online (Sandbox Code Playgroud)
要么
var args = new DynamicParameters(name);
var r = sql.Query<T>("select * from TableName where Name = '@name'", args);
Run Code Online (Sandbox Code Playgroud)
要么
var args = new DynamicParameters(); args.AddDynamicParams(new { name });
var r = sql.Query<T>("select * from TableName where Name = '@name'", …Run Code Online (Sandbox Code Playgroud)