2016-09-14 33 views
13

Tôi có một ứng dụng iOS sẽ được phân phối cho nhiều khách hàng, mỗi khách hàng sử dụng cơ sở hạ tầng mạng của riêng họ. Tôi muốn thêm một số khả năng ghim giấy chứng nhận, nhưng tôi cần phải làm điều đó theo kiểu động vì tôi không thể gửi ứng dụng với gói cert/pubkey, vì làm như vậy sẽ yêu cầu một bản dựng khác cho từng khách hàng.Ghim chứng chỉ động

Ý tưởng của tôi là truy vấn máy chủ HTTPS được định cấu hình trên mỗi máy khách khi khởi động ứng dụng, nhận chứng chỉ, có khả năng trích xuất khóa công khai và sau đó ghim nó.

Có thể thực hiện điều này trong Swift hoặc Objective-C không? Tôi không thể tìm thấy các mẫu mã hoặc tài liệu có liên quan.

+0

Bạn đã thử SSLPinningMode chưa? [this] (http://stackoverflow.com/questions/16613081/ssl-pinning-with-afnetworking) có thể hữu ích. Nếu bạn đang lập kế hoạch phân phối trên cửa hàng ứng dụng, tôi nghi ngờ nó sẽ được chấp nhận (phần về tải xuống và giải nén chứng chỉ). – jugutier

+2

Đây là một ví dụ trong iOS Đẩy giới hạn: https://github.com/iosptl/ios7ptl/blob/master/ch14-Security/Connection/Connection/ConnectionViewController.m. Xem 'RNSecTrustEvaluateAsX509'. Nó bao gồm mã để trích xuất chứng chỉ từ kết nối. Sau đó, bạn có thể ghi chứng chỉ ra tệp và sau đó sử dụng các phương pháp ghim chuẩn như https://github.com/rnapier/RNPinnedCertValidator. –

+0

Siêu liên kết không liên quan, nhưng @RobNapier bạn có đang lên kế hoạch phát hành phiên bản mới của Đẩy giới hạn cho iOS 10 không? – JAL

Trả lời

1

Hoạt động, sẽ dễ dàng hơn nhiều trong việc quản lý và khôi phục từ cấu hình sai nếu bạn nhúng chứng chỉ hoặc khóa trong ứng dụng. Nếu bạn chỉ ghim bất kỳ chứng chỉ nào mà máy chủ gửi đến Ứng dụng lần đầu tiên, bạn không có cơ chế để hỗ trợ chứng chỉ mới sau khi chứng chỉ hiện tại hết hạn hoặc bị xoay vòng. Nếu đó vẫn là những gì bạn muốn làm, tôi khuyên bạn nên xem đặc tả HPKP, thực hiện cùng một cơ chế nhưng đối với các trình duyệt: https://tools.ietf.org/html/rfc7469

Ngoài ra, nếu máy chủ ứng dụng không nằm trong tầm kiểm soát của bạn, có thay đổi việc ghim sẽ kết thúc việc brick ứng dụng, nếu chứng chỉ của máy chủ bất ngờ thay đổi. Liệu nhóm xây dựng ứng dụng có được thông báo về các thay đổi về cơ sở hạ tầng/chứng chỉ trên máy chủ ứng dụng/khách hàng, để họ có thể phát hành bản cập nhật đúng lúc không? Nếu không, bạn không nên làm điều đó.

+0

Tôi vừa mới bỏ phiếu cho câu trả lời này. Tôi nhận ra đây không phải là những gì mà người đăng tải yêu cầu, nhưng câu trả lời này rất hữu ích và chỉ ra những nguy hiểm khi làm những gì mà người đề xuất đưa ra và cung cấp thêm thông tin. Theo phần trợ giúp, bài đăng này là 'thú vị, được nghiên cứu kỹ lưỡng và hữu ích'. –