2013-04-10 50 views
4

我希望驗證服務器的證書。我有一個boost :: ASIO :: SSL ::背景boost :: asio :: ssl :: context :: add_verify_path

這成功地驗證了證書:

context.load_verify_file("E:\\a\\windows\\Path\\to\\certificate\\9207bca9.0"); 

不過,我不希望明確指定驗證對證書的文件。我希望能夠將它們放在一個目錄中,並告訴上下文使用該文件夾中的文件來驗證證書。所以,我這樣做,而不是:

context.add_verify_path("E:\\a\\windows\\Path\\to\\certificate"); 

和驗證不成功

注意:文件名9207bca9.0:9207bca9是CA證書的主體的哈希值,它的擴展名是」 0.0'爲了滿足在這裏找到了add_verify_path方法的要求(也是這個文件的唯一內容是根證書請記住我已經成功地驗證與此文件的證書。):

http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/ssl__context/add_verify_path/overload1.html

任何sugg estions?

+0

從問題中不清楚實際問題是什麼。 「所以我這樣做」 - 然後呢? –

+0

你解決了你的問題嗎?當你使用像這樣的「準官方」pem來檢查根服務器時會發生什麼:http://curl.haxx.se/ca/cacert.pem。它在單個文件中有多個證書,並在windows下爲我工作(openssl 1.0.1p和ctx.load_verify_file(..)) –

回答

2

只有兩個,我能想到的可能性,第一個是你的哈希值是不正確,這可以證明,像這樣:

openssl x509 -noout -hash -in ca-certificate-file 

二是有在你的目錄中的一些錯誤配置阻止OpenSSL使用CA目錄,例如,權限和所有權在Linux系統中很重要,不確定這些問題在Windows平臺上有多大。查明這類錯誤的唯一方法是通過調試器跟蹤驗證階段,並在掃描目錄時直接觀察代碼。