2015-06-17 15 views
49

Tôi phát triển ứng dụng iOS của mình bằng máy chủ cục bộ đang chạy trên hộp dev của tôi. Khi thử nghiệm trên thiết bị, tôi kết nối trực tiếp qua địa chỉ IP, qua HTTP và không phải HTTPS (vì vậy tôi không phải đối phó với các chứng chỉ tự ký trong khi đang phát triển, thiết bị này thậm chí không thích anyways).Bảo mật và địa chỉ IP của Giao thông vận tải ứng dụng trong iOS9

Tôi nghĩ rằng điều này sẽ là đủ:

enter image description here

Tuy nhiên, không thể lấy nó để làm việc mà không có cũng thêm NSAllowsArbitraryLoads = YES, AKA này:

enter image description here

Bây giờ, tôi sẽ có nhớ để loại bỏ điều này khi lăn một bản xây dựng sản xuất nhưng không phải trong quá trình phát triển ... arg. Nếu NSExceptionDomains hoạt động với địa chỉ IP, và nếu không, tôi có thể làm gì khác mà không cần kích hoạt NSAllowsArbitraryLoads không?

Trả lời

49

Địa chỉ IP được mã hóa cứng sẽ không hoạt động trong iOS9. Tôi cũng phải đối mặt với cùng một vấn đề. Đã thử tất cả các hoán vị & kết hợp các giải pháp có sẵn. Cuối cùng, phải sử dụng một tên miền thích hợp.

Vì vậy, KHÔNG. Trong iOS9, bạn không thể thoát khỏi các địa chỉ IP được mã hóa cứng.

+3

Tôi bắt gặp liên kết này: https://forums.developer.apple.com/thread/6205 về cách cho phép địa chỉ IP trên mạng LAN. Rất tiếc, không có giải pháp hiện tại nhưng yêu cầu tính năng đã được gửi. –

+2

Có ai tìm thấy tài liệu chính thức nêu rõ điều này không? Đây có phải là lỗi của Apple hay dự định này không? –

+6

Mục đích này chỉ nhằm mục đích bảo mật. Apple đã đề cập điều này trong WWI-2015 http://www.internetsociety.org/deploy360/blog/2015/06/apple-will-require-ipv6-support-for-all-ios-9-apps/ – PanxShaz

21

tôi còn có thể làm gì khác mà không cần bật NSAllowsArbitraryLoads?

Một workaround là sử dụng xip.io, như được giải thích bởi QJeffR trong this Apple Developer Forums thread (được chia sẻ bởi David L trong his comment):

Một cuộc gọi DNS để (ví dụ) 10.0.1.8.xip.io sẽ giải quyết để 10.0.1.8, cho phép sử dụng miền thay vì địa chỉ IP cho khóa NSExceptionDomains.

+0

Tính năng này phù hợp với những người cần (vì nhiều lý do) kết nối với địa chỉ IP thay vì tên miền hoặc để kết nối với địa chỉ IP LAN. Tính năng này cũng hoạt động đối với địa chỉ LAN, nhưng iOS phải có kết nối internet để có thể truy cập dịch vụ xip.io. Sau đó, tất cả những gì bạn cần là cho phép "xip.io" và tên miền phụ trong Cài đặt bảo mật truyền tải ứng dụng. – wilsontgh

+0

Đề xuất tuyệt vời! – delrox

+0

Điều này sẽ không chỉ định tuyến tất cả lưu lượng truy cập không an toàn của bạn thông qua một máy chủ xip.io không xác định? – Efren

5

Như @PanxShaz nói rằng bạn không thể đặt một địa chỉ IP mã hóa cứng nhưng bạn có thể sử dụng một workaround dễ dàng:

  1. Mở tập tin /etc/hosts bạn sử dụng sudo và thêm một tên miền địa phương mới cho ip của bạn địa chỉ nhà. Ví dụ:

    192.168.99.100 docker-host.localhost

  2. Sau đó tuôn DNS của bạn:

    dscacheutil -flushcache

  3. Và cuối cùng sử dụng tên miền địa phương mới này trong ứng dụng ngoại lệ an ninh giao thông của bạn.

+0

Điều này là không thể trên iOS mà không cần jailbreaking. – Avi

+0

@Avi Vâng, có thể, đơn giản bởi vì điều này thực sự được thực hiện trên mac của bạn. Mục đích ở đây là cung cấp một cách giải quyết khi phát triển. – anasaitali

+0

Trừ khi thiết bị iOS của bạn đang sử dụng mac cho DNS, nó sẽ không hoạt động. Có lẽ trên giả lập. – Avi

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