已成功与服务器建立连接,但在登录前握手期间发生错误。 (无法更改SQL Server)

时间:2013-02-06 05:02:24

标签: c# asp.net sql-server web-config

我有一个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和托管服务签署的有效证书,不是自签名的)。但是,托管服务告诉我:

  1. SQL Server必须设置为“强制协议加密”,因为它是共享服务器

  2. 他们无法导入证书或进行任何更改,也不允许我为此做任何事情

  3. 还有其他解决方案吗?这是我的代码的问题吗?我尝试从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>
    

2 个答案:

答案 0 :(得分:0)

我不知道这是否是一个很好的永久修复,但我终于可以通过使用数据库的IP地址和连接字符串中的端口而不是数据库的“web”地址来连接它。所以我用“192.168.1.213,1433”替换了“mydb.thehostingservice.com”。

在此之后,它能够连接。

但令我怀疑的是,这是一个永久的解决方案,在此之后,我切换回使用连接字符串中的“mydb.thehostingservice.com”来查看ti是否会破坏,现在也有效!所以这可能会在将来再次打破我。

以前我收到了错误,但是我删除了我的web.config和dll并且暂时修复了它 - 但是删除这些内容的最新时间没有解决它 - 所以我担心这是相同的。

编辑:它再次给我错误。那不是解决方案。我不确定为什么偶尔会再次开始工作然后突然停止工作。有谁知道吗?

答案 1 :(得分:0)

我在互联网上阅读此问题的先前帖子和解决方案是问题可能在您的客户端而不是他们的服务器上。尝试解决这个问题的第一步是将以下内容添加到连接字符串中:

;Use Encryption for Data=True

然后查看是否可以解决问题,或者是否更改了错误消息。


好的,我注意到的一件事是你的连接字符串中有..;user=..。尝试将“user =”更改为“user id =”。


我现在只能想到另外一件事:在客户端上启动SQL配置实用程序,右键单击SQL Native Client协议并选择“Properties”。然后注意“Force [Protocol] Encryption”设置为什么,然后反转它。现在重新启动所有内容并尝试再次连接。