2012-11-29 192 views
0

我想從c#應用程序使用SSL連接到MySQL。下面是我的連接字符串:SSL連接錯誤

server = "xxx.xxx.xxx.xxx"; 
     database = "sqlserver"; 
     uid = "sqlserver"; 
     password = "password"; 
     cert_file = "client-cert.pfx";  
     string connectionString; 
     connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + "; CertificateFile=" + cert_file + "; CertificatePassword=admin; SslMode=Required"; 

這是錯誤:

System.IO.IOException: Received an unexpected EOF or 0 bytes from the transport stream. at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count) at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) at MySql.Data.MySqlClient.NativeDriver.StartSSL() at MySql.Data.MySqlClient.NativeDriver.Open() at MySql.Data.MySqlClient.Driver.Open() at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings) at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection() at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection() at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver() at MySql.Data.MySqlClient.MySqlPool.GetConnection() at MySql.Data.MySqlClient.MySqlConnection.Open() at

我認爲這個問題是我的文件,但現在我知道這是不是...所以我失去了

+0

ssl證書是否指定主機名模式? –

+0

可能是這個問題 - http://www.limilabs.com/blog/received-unexpected-eof-0-bytes-from-transport-stream – Petesh

回答

0
server = "xxx.xxx.xxx.xxx"; 

大多數情況下,SSL證書定義了主機名模式(例如* .google.com)。在SSL認證期間,主機名被驗證爲來自正確的域。使用服務器的IP地址將導致此檢查失敗。

我會嘗試將主機名設置爲服務器,看看你是否得到不同的結果。

+0

我使用了主機名,但我仍然有這個錯誤。 – sedigo

+0

可能是我的openssl安裝問題。我已經安裝了從http://slproweb.com/products/Win32OpenSSL.html下載的64位OpenSSL。我是否還需要在Visual Studio中包含任何內容?這可能是問題嗎? – sedigo