2012-02-23 29 views
6

Tôi wann kiểm tra thời tiết SSL cetificate có mặt trong URL cũng muốn kiểm tra phiên bản và loại xác thực của nó.Cách kiểm tra bảo mật của chứng chỉ SSL trong iOS?

Tôi đã tạo một ứng dụng mà tôi đang gọi phương thức ủy quyền NSURLConnection để gửi yêu cầu qua máy chủ.

Cũng sử dụng phương pháp "canAuthenticateAgainstProtectionSpace", nhưng phương pháp này không được gọi khi kết nối được thiết lập.

Bất kỳ ai cũng có thể cho tôi biết cách đạt được điều này.

Trả lời

9

iOS không cung cấp cho bạn quyền truy cập rất chi tiết vào thông tin chứng chỉ. Bạn có hai lựa chọn: API riêng hoặc xây dựng bộ đánh giá của riêng bạn với OpenSSL.

Bạn có thể xem các chức năng chứng chỉ riêng trong opensource code. Phiên bản có sẵn từ SecCertificateVersion(). Tôi không chắc chắn những gì bạn có nghĩa là "loại xác nhận" ở đây.

Để làm điều này với OpenSSL, bạn có thể lấy dữ liệu DER với SecCertificateCopyData() và sau đó tự phân tích cú pháp mọi thứ.

Tôi khuyên bạn nên mở radar (bugreporter.apple.com) về sự cố này. Việc thiếu quyền truy cập vào thông tin cơ bản về chứng chỉ là một vấn đề nghiêm trọng.

Nếu bạn đang tìm kiếm mẫu mã mà chiết xuất giấy chứng nhận từ NSURLConnection, xem Chapter 11 sample code từ iOS:PTL:

- (void)connection:(NSURLConnection *)connection 
    willSendRequestForAuthenticationChallenge: 
    (NSURLAuthenticationChallenge *)challenge 
{ 
    NSURLProtectionSpace *protSpace = challenge.protectionSpace; 
    SecTrustRef trust = protSpace.serverTrust; 
    ... 
    SecCertificateRef cert = SecTrustGetCertificateAtIndex(trust, 0); 
    ... 

Tại thời điểm này, cert giữ giấy chứng nhận lá của bạn.

+0

Cảm ơn bạn đã đề xuất. "Loại xác thực" có nghĩa là loại xác thực SSL nào được triển khai trên URL, hoặc là Xác thực chuẩn hoặc Mở rộng. Ở đây tôi đã sử dụng mã được đưa ra trong "Mã mẫu chương 11" nhưng khi tôi đang cố gắng xây dựng ứng dụng tôi nhận được lỗi thời gian biên dịch a -> Biểu tượng không xác định cho kiến ​​trúc i386: "_SecPolicyCreateBasicX509", được tham chiếu từ: _RNSecTrustEvaluateAsX509 in ConnectionViewController.o, "_SecCertificateNotValidAfter", được tham chiếu từ: - [ConnectionViewController connection: willSendRequestForAuthenticationChallenge:] trong ConnectionViewController.o – iLearner

+2

Bạn cần liên kết Security.framework. –

Các vấn đề liên quan