Tôi hiện đang mở kết nối https tới máy chủ web bằng NSURLConnection. Tất cả mọi thứ hoạt động như nó cần và tôi có thể lấy lại nội dung trang tôi đang làm. Chứng chỉ được VeriSign cấp và tôi giả định NSURLConnection thực hiện một số công việc để xác minh tính xác thực của chứng chỉ ở một mức độ nào đó? Nếu tôi kết nối với cùng một trang web thông qua safari di động, nó sẽ trích xuất từ chứng chỉ và hiển thị Tổ chức (của trang web) trong thanh điều hướng. Có thể trích xuất các chi tiết tương tự này trong Cocoa Touch vì tôi cũng muốn trình bày chúng cho người dùng không? Ngoài ra, việc xác minh tên máy chủ của máy chủ đối với chứng chỉ đó đủ hợp lý để giả sử trang web là hợp pháp?Cách xác minh chứng chỉ trang web trong Cocoa Touch?
Trả lời
NSURLConnection
sẽ cung cấp cho bạn một lỗi (NSURLErrorDomain
) nếu bạn cố kết nối với máy chủ có chứng chỉ không hợp lệ (ví dụ: ký tự, đã lỗi thời, có máy chủ không đúng, v.v.). Vì vậy, bạn không thực sự cần phải tự mình thực hiện bất kỳ xác minh nào vì tất cả đều được xử lý cho bạn.
Nếu bạn thực sự muốn/cần hiển thị tóm tắt chứng chỉ SSL trong giao diện người dùng của mình, bạn cần phải thả xuống một lớp từ NSURLConnection
và sử dụng API cấp thấp CFNetwork
thay thế. Một khi bạn có một CFReadStreamRef
đó là trong tình trạng kCFStreamEventEndEncountered
, bạn sẽ có thể làm như sau (giả sử dòng xử lý của bạn được gọi 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];
}
Bạn sẽ cần phải giải mã các thông tin được tổ chức tại data
nếu bạn muốn để truy cập các thuộc tính khác nhau của chứng chỉ, nhưng tóm tắt được giữ trong description
có thể là đủ cho các mục đích của bạn.
- 1. xác minh chứng chỉ x509 trong C
- 2. Trang web Xác thực thẻ thông minh PKSC# 11 và chứng chỉ ứng dụng khách SSL
- 3. OpenSSL chứng chỉ xác minh trên Linux
- 4. Tắt xác minh chứng chỉ SSL trong Ruby
- 5. Xác minh chứng chỉ PKCS # 7 trong Java
- 6. Xoay UIView trong Cocoa Touch
- 7. OpenSSL xác minh chứng chỉ từ CA của riêng mình
- 8. Cách chính xác để xác minh chứng chỉ SSL trong Win32 là gì?
- 9. Chuỗi chứng chỉ WCF, xác minh theo chương trình
- 10. Java/Keystore Xác minh chứng chỉ đã ký
- 11. Yêu cầu Python "chứng chỉ xác minh không thành công"
- 12. Cách xác minh (và yêu cầu) chứng chỉ tự ký trong iOS
- 13. Giám sát thư mục trong Cocoa/Cocoa Touch
- 14. Thư viện POP/SMTP có nguồn mở Cocoa/Cocoa-Touch?
- 15. Xác minh chứng chỉ SSL từ xa trong khi yêu cầu HTTPS
- 16. Cách bỏ qua xác minh chứng chỉ SSL trong open-uri?
- 17. Chứng chỉ SSL với Trang web Windows Azure
- 18. cách xác minh chứng chỉ ứng dụng khách bằng cách sử dụng boost :: asio SSL?
- 19. Có cách nào để tự động xác định ivars của một lớp khi chạy trong Cocoa/Cocoa Touch không?
- 20. Cách xác thực Mã số chứng minh quốc tế (ISIN)
- 21. Cocoa-Touch - Ủy quyền sự nhầm lẫn
- 22. drawrect Vs layoutsubviews - NSView - Cocoa touch
- 23. Hiểu mẫu thiết kế MVC trong Cocoa Touch
- 24. Cách triển khai Chứng chỉ thông báo đẩy của Apple cho trang web của khách hàng
- 25. Cách gán Chứng chỉ SSL cho Trang web IIS7 từ Dấu nhắc Lệnh
- 26. Không thể phát hành mvn: chuẩn bị, chứng chỉ máy chủ không xác minh được
- 27. Vẽ mục tiêu hình ảnh với Cocoa Touch
- 28. Xác minh chứng chỉ tự ký/hết hạn với thư viện openssl không trả lại lỗi
- 29. Gặp sự cố khi hiểu xác minh chuỗi chứng chỉ SSL
- 30. IIS có thực hiện kiểm tra chứng chỉ SSL hoặc tôi có phải xác minh không?
Cảm ơn sự giúp đỡ của Nathan, hãy thả một lớp như bạn đã đề xuất làm thủ thuật! Mặc dù không thực sự là một vấn đề, không nên NSDictionary * cast của bạn là một NSArray * thay vào đó? – dbotha
Bạn có thể đăng một mẫu mã Deon không? – Pripyat
@Deon Phải rồi! Tôi đã cập nhật mã mẫu. –