2012-03-28 35 views
0

我們有一個應用程序使用Indy 9建立在Delphi 7中,用於連接到運行在Linux上的PHP後端的https連接。該應用程序連接到我們當前的生產服務器沒有問題。我們一直在爲這個應用程序構建一個測試環境,並在測試Web服務器上拒絕使用https進行連接。該應用程序已經能夠使用http連接到這個服務器。我可以使用應用程序進行的相同Web調用來連接任何當前的瀏覽器(沒有嘗試過舊的瀏覽器),並且我獲得了連接,並且數據完美恢復,所以顯然Indy 9中有一些東西阻止了它的工作。是爲什麼這個問題在這裏,而不是在ServerFault上)有沒有人有足夠的經驗與Indy/SSL知道這裏發生了什麼?Delphi 7/Indy 9應用程序無法通過SSL連接到Apache

下面是我認爲可能有一些輸入的幾個區別: 1.我最初是從通配符證書開始的。這是有效的,並在正確的域名。它與我們在許多服務器上的其他所有功能一起工作。 2.認爲通配符證書可能比Indy 9更新,我刪除了通配符證書,並將自簽名證書和完整的機器名稱一起放入。它以同樣的方式失敗。但是,正如你所知,瀏覽器發佈了一個證書例外與這些自簽名的證書,所以我不確定這是否也會給Indy問題。 3.我確定我們的新開發服務器上的OpenSSH版本比我們生產服務器上的新版本要新。如果有人認爲它有幫助,我可以挖掘出這些確切的版本。

這是我繼承的應用程序,所以我對SSL和Indy的知識有限。這個應用程序是在它的生命的盡頭,所以升級到Indy 10不是我公司要資助的東西。任何幫助或指示或提示都非常受歡迎,我的感謝將是無限的。 非常感謝你堆垛機!

+0

您是否設置了一些斷點或將一些OutputDebugString或CodeSite日誌消息放入?你至少應該詳細說明你從發現錯誤的過程中發現了什麼。 「不連接?」怎麼樣? – 2012-03-28 20:46:59

回答

3

沒有提及正在發生的特定錯誤,因此提供建議時不會出現特定的錯誤消息是很困難的。

1)追蹤您在SSL握手中收到的實際響應,並嘗試製作消息的正面或反面。 (DoStatusInfo())

2)(大猜測在這裏)SSL連接有不同的版本,其中舊版本已過期,不再支持。如果你正在構建一個新的服務器,它可能會有與當前生產機器不同的默認設置,我假設這是一個更老的版本。 (它越老,這個猜測就越適用。)較新的服務器應該有希望拒絕連接到SSL V2和V3(並且只允許TLS)。因此,這可能是舊生產服務器和新測試服務器的配置不同而這個新版本會過濾出舊的SSL版本並阻止握手繼續。 (這將顯示在#1的握手失敗中,這是您真正用於回答此問題的工具。)

下面是使用openssl.exe進行連接的快速測試。嘗試連接到測試盒和生產計算機以查看連接是否已建立。你也可以嘗試v3,以驗證或消除這個猜測......如果他們採取相同的行動,那麼專注於#1。 :)

openssl s_client -ssl2 -connect yourhost:443 
2

嘗試使sslvrfPeer國旗在TIdSSLIOHandlerSocket.VerifyMode屬性,然後在TIdSSLIOHandlerSocket.OnVerifyPeer事件中返回True

相關問題