我目前使用NSURLConnection打開一個到Web服務器的https連接。一切都按原樣運行,我可以檢索我之後的頁面內容。證書由VeriSign頒發,我假定NSURLConnection在某種程度上做了一些工作來驗證證書的真實性。如果我通過移動Safari瀏覽器連接到同一網站,它將從證書中提取,並在導航欄中顯示組織(網站的)。是否可能在Cocoa Touch中提取這些相同的細節,因爲我也想將它們呈現給用戶?還要根據該證書驗證服務器的主機名是否足夠合理以承擔網站的合法性?如何驗證Cocoa Touch中的網站證書?
6
A
回答
5
NSURLConnection
如果您嘗試連接到具有無效證書的服務器(例如,它是自簽名的,過期的,具有錯誤的主機等),則會出現錯誤(NSURLErrorDomain
)。所以你實際上不需要自己做任何驗證,因爲它都是爲你處理的。
如果您確實需要/需要在您的用戶界面中顯示SSL證書摘要,則需要從NSURLConnection
下拉一層,並使用低級別CFNetwork
API。一旦你有一個CFReadStreamRef
這是在kCFStreamEventEndEncountered
狀態,你應該能夠做到以下幾點(假設你的流手柄稱爲readStream
):
NSArray* certificates = [(NSArray*)CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates) autorelease];
if ([certificates count] > 0) {
SecCertificateRef certificate = (SecCertificateRef)[certificates objectAtIndex:0];
NSString* description = [(NSString*)SecCertificateCopySubjectSummary(certificate) autorelease];
NSData* data = [(NSData*)SecCertificateCopyData(certificate) autorelease];
}
你需要,如果你想在data
舉行的信息進行解碼訪問證書的各種屬性,但在description
舉行的總結可能已足夠您的目的。
相關問題
- 1. 驗證遠程網站的SSL證書
- 2. 如何驗證我的網站是否使用SHA256RSA SSL證書?
- 3. 網站HTTPS證書
- 4. 驗證網站的憑證
- 5. 如何驗證C中的X509證書
- 6. 如何驗證Perl中的網站URL?
- 7. 帶SSL證書的網站
- 8. Cocoa-Touch:如何在輸入驗證後更改視圖?
- 9. 驗證證書
- 10. 如何在python中驗證SSL證書?
- 11. WCF中的證書驗證
- 12. 如何使網站SSL證書有效?
- 13. 如何抓取網站證書?
- 14. https免費證書網站
- 15. SSL證書1個網站
- 16. 網站證書問題
- 17. 網站PKSC#11智能卡驗證和SSL客戶端證書
- 18. 如何在Python中驗證/驗證X509證書信任鏈?
- 19. 如何驗證我的網站?
- 20. 如何驗證網站的所有權?
- 21. 如何驗證網站的所有權?
- 22. 證書鏈驗證
- 23. stunnel證書驗證
- 24. 與驗證證書
- 25. 如何在Windows上禁用LDAP驗證的證書驗證?
- 26. 在Cocoa中驗證數據
- 27. 如何使用html5驗證器驗證php網站
- 28. Thawte證書中的「簽名中的證書無法驗證」
- 29. 網站的特定驗證
- 30. AOL OpenID的網站驗證
感謝Nathan的幫助,放下了一層像你這樣的竅門!雖然不是一個真正的問題,你的NSDictionary * cast不應該是NSArray *嗎? – dbotha
你能發佈代碼示例Deon嗎? – Pripyat
@Deon正確的你!我更新了示例代碼。 –