2009年6月8日 星期一

FreeTDS的加密傳輸(Secure Connection)

最近遇到的鐵板是使用FreeTDS連接SQL Server會出現模稜兩可的Msg 20017錯誤訊息,
Msg 20017, Level 9, State -1, Server OpenClient, Line -1
Unexpected EOF from the server

使用TDSDUMP看錯誤訊息後發現在傳輸建立初期就已經被中斷,
util.c:334:tdserror(0x997e0a8, 0x997ea50, 20017, 0)
util.c:368:tdserror: client library returned TDS_INT_CANCEL(2)

在來回比對之後才發現遇到了有加密(Force Encryption)的SQL Serve,

需以--with-openssl=/src/openssl --with-gnutls的設定重新安裝FreeTDS, 並且在FreeTDS的設定檔中加上 encryption = required或request的參數,

看似美好, 但重新安裝後仍遇到一樣的錯誤訊息, 再度以TDSDUMP檢查後發現訊息有所不同了, 是在送出表頭前出錯的...
net.c:779:Sending packet
0000 12 01 00 34 00 00 00 00-00 00 15 00 06 01 00 1b |...4.... ........|
0010 00 01 02 00 1c 00 0c 03-00 28 00 04 ff 08 00 01 |........ .(......|
0020 55 00 00 00 4d 53 53 51-4c 53 65 72 76 65 72 00 |U...MSSQ LServer.|
0030 f2 31 00 00 - |.1..|

原來因為一開始安裝機器時不想裝進一些亂七八糟的東西, 所以只選了確定要的套件, 因此少裝了某些加密模組, 最後還是只好拿出光碟片乖乖的把base的東西補齊,

終於可以快快樂樂的以FreeTDS進行加密傳輸了...

沒有留言: