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.
Nguồn
2012-02-23 15:19:32
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
Bạn cần liên kết Security.framework. –