已成功与服务器建立连接,但在登录前握手过程中发生错误.(无法更改SQL Server)
本文关键字:错误 Server SQL 过程中 建立 连接 服务器 成功 登录 | 更新日期: 2023-09-27 17:57:46
我有一个作为共享帐户托管的ASP.Net网站。我得到错误:
A connection was successfully established with the server, but then an error
occurred during the pre-login handshake. (provider: SSL Provider, error: 0 -
The specified data could not be decrypted.
我在网上找到的信息似乎表明问题是SQL Server不信任证书(SSL证书是由verisign和托管服务签名的有效证书,而不是自签名的)。然而,托管服务告诉我:
SQL Server必须设置为"强制协议加密",因为它是一个共享服务器
他们无法导入证书或进行任何更改,也不允许我在这方面做任何事情
还有其他解决方案吗?这是我的代码有问题吗?我试着从bin文件夹和web.config中删除我的DLL,只制作了一个直接连接到数据库的aspx页面,但我仍然遇到了同样的错误!
有可能解决这个问题吗?是我的代码导致了这种情况吗?
编辑:我改为使用连接字符串中的ip地址,它暂时重新开始工作,但现在它再次给我错误。我不知道为什么它偶尔会重新开始工作,然后突然停止工作。有人知道吗
(代码在我本地托管的开发服务器上运行良好)
网页
<%@ Page language="c#" %>
<%@ Import namespace="System" %>
<%@ Import namespace="System.Web" %>
<%@ Import namespace="System.Data" %>
<%@ Import namespace="System.Data.SqlClient" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
try
{
//Now insert into database
SqlConnection conn = new SqlConnection( ConfigurationManager.AppSettings["ConnectionString"] );
conn.Open();
SqlCommand cmd = new SqlCommand( );
cmd.Connection = conn;
cmd.CommandText = "SELECT * FROM TestTable";
cmd.ExecuteReader();
Response.Write( "done" );
}
catch (Exception sqlEx)
{
Response.Write( sqlEx.ToString() );
}
}
</script>
Web.config
<?xml version="1.0"?>
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
<appSettings>
<add key="ConnectionString" value="server=mydb.thehostingservice.com;user=dbUser;initial catalog=test;pwd=dbpass" ></add>
</appSettings>
</configuration>
我不知道这是否是一个好的永久修复,但我最终能够通过使用数据库的IP地址和连接字符串中的端口而不是数据库的"web"地址来进行连接。所以我用"192.168.1.2131433"替换了"mydb.hostingservice.com"
之后,它能够连接。
但让我怀疑这是否是一个永久性的解决方案的是,在这之后,我在连接字符串中重新使用"mydb.hostingservice.com",看看ti是否会中断,现在也可以了!所以这可能会在未来再次困扰我。
以前我收到过这个错误,但我删除了我的web.config和dll,并暂时修复了它——但最近一次删除这些东西并没有修复它——所以我担心这也是一样的。
编辑:它又给了我一个错误。这不是解决办法我不知道为什么它偶尔会重新开始工作,然后突然停止工作。有人知道吗?
我以前在互联网上发布的关于这个问题的帖子和解决方案的阅读表明,问题可能出现在您的客户端而不是服务器上。尝试弄清楚这一点的第一步是将以下内容添加到您的连接字符串中:
;Use Encryption for Data=True
然后看看这是否解决了问题,或者是否更改了错误消息。
好的,我注意到的一件事是,在连接字符串中有..;user=..
。尝试将"user="更改为"userid="。
在这一点上,我只能想到另一件事来尝试:在客户端上打开SQL配置实用程序,右键单击SQL Native client协议,然后选择"Properties"。然后注意"强制[协议]加密"设置为什么,然后将其反转。现在重新启动一切并尝试再次连接。
我最近在升级到.NET Core 6后遇到了这种情况。在.Net Core 2.1中一切都很好。我复制了正在生成的SQL,并在SSMS中手动运行它。实体框架生成的简单查询返回的结果绝对巨大。40000多条记录,每条记录有数百个字段。查询超时并返回部分结果。我认为损坏的数据无法解密。我使用IQueryable()追踪到了这一点。切换以下代码
private IQueryable<Event> EventQueryable(Guid id) =>
EventQueryable()
.Where(evt => evt.Id == id);
Event evt = await _dbContext.EventQueryable(id)
以避免IQueryable
Event evt = await _dbContext.Events.Where(e => e.Id == id)
几乎立即返回一行。