2012-01-25 103 views
3

我有一個現有的DataSnap服務器(Windows服務)在HTTP上運行良好,我現在想要添加HTTPS作爲附加協議。我已經獲得並安裝了SSL證書並生成了證書文件(.crt)和私鑰文件(.key)。作爲一個測試,當使用Delphi XE2 DataSnap Server嚮導並勾選'HTTPS'來獲取證書頁面時,我可以引用這2個文件並點擊成功的'測試'按鈕。我已經添加了一個額外的TDSHTTPService組件並將其鏈接到TDSCertFiles組件。在啓動DSServer之前,在我的服務啓動事件中,我將DSCertFiles.CertFile和DSCertFiles.KeyFile屬性中的路徑設置爲2個證書文件。當試圖啓動服務時,我得到錯誤:Delphi XE2 DataSnap Server - HTTPS'無法加載證書'

Could not load certificate. error:140AD002:SSL routines:SSL_CTX_use_certificate_file:system lib

有什麼我失蹤了嗎?

+0

請問您的代碼驗證服務實際上可以「看到」的證書文件(這可能是一個路徑或權限問題)? – mjn

+0

嗨,看到我的評論Remy的答案 - 組件似乎只在設計時尋找路徑集中的證書(也許是一個bug?)。 –

+0

您可以驗證它是否是一個錯誤 - 只要將文件放入設計時定義的位置,錯誤就會消失。否則,服務環境出現問題 – mjn

回答

1

錯誤代碼0x140AD002表示SSL_CTX_use_certificate_file()無法打開文件。

+0

非常感謝,看起來DataSnap證書組件總是在設計時在TDSCertFiles組件上指定的路徑中查找證書文件,並忽略了在運行時可能在代碼中設置的新路徑。 –

4

在XE2和XE3中有一個衆所周知的錯誤。

我發現了這個解決方法。設置TDSCert屬性和

之前啓動DSHTTPServer,調用這個方法:

DSCertFiles2.SetServerProperties(DSHTTPService2.HttpServer); //WORK AROUND