2015-04-10 26 views
7

Câu hỏi đặt ra là, làm cách nào để cài đặt các gói an toàn với pip, trên Ubuntu Trusty? Tất nhiên tôi cần phải làm rõ lý do tại sao tôi tin rằng nó không an toàn.Làm thế nào để sử dụng một cách an toàn pip (với SSL) trên Ubuntu Trusty?

urllib3 cung cấp số InsecurePlatformWarning nếu bạn thực hiện yêu cầu https mà không cần thêm vài thư viện python liên quan đến openssl bổ sung, trước Python 2.7.9. Đây là một câu hỏi cũng được thành lập và trả lời:

InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately

Vấn đề là, nếu bạn cài đặt phiên bản 6 pip hoặc lâu hơn, nó bắt đầu đem lại cho bạn cảnh báo rất này, như bạn cài đặt bất cứ điều gì. Từ đọc các câu trả lời chính thức cho vấn đề:

https://urllib3.readthedocs.org/en/latest/security.html#pyopenssl

có vẻ như vấn đề nằm trong thư viện ssl Python. Pip vừa chuyển sang thư viện Python ssl từ openssl trong phiên bản mới nhất chưa? Đoán của tôi (có lẽ là một dự đoán xấu) là pip sử dụng thư viện Python trước đây, nó chỉ sử dụng một phiên bản cũ của urllib mà thậm chí không đưa ra cảnh báo. Vì vậy, nó đã không an toàn toàn bộ thời gian (mặc dù các mối quan tâm đặc biệt của mối quan tâm dường như là hơi gần đây).

Vâng nếu đó là trường hợp, phiên bản cổ phiếu của pip trên Ubuntu không an toàn. Tôi không thể sử dụng nó để cài đặt một cách an toàn công cụ để an toàn. Không có vấn đề, tôi chỉ có thể cài đặt những điều tương tự từ repo của Ubuntu, mà xác minh gói với GPG:

http://packages.ubuntu.com/search?keywords=python-ndg-httpsclient

Trừ ở trên là chỉ có sẵn bắt đầu từ năm Utopic. Trên Trusty tôi dường như bị mắc kẹt.

Vậy thỏa thuận là gì? Tôi có phải cuộn xúc xắc và cài đặt công cụ này không an toàn một lần, và sau đó sử dụng pip an toàn chỉ sau đó? Hay tôi hoàn toàn hiểu sai hoàn cảnh?

Trả lời

6

pip sử dụng mô-đun ssl thư viện chuẩn theo mặc định (trừ khi bạn cũng cài đặt các thư viện bổ sung mà bạn đã đề cập). Trước Python 2.7.9 và Python 3.2 (ish, tôi tin rằng nó là 3.2, có thể là 3.1) module ssl bên trong thư viện chuẩn thiếu khả năng kiểm soát các thiết lập nhất định liên quan đến ssl.

Một số các thiết lập này:

  • Bạn không thể vô hiệu hóa SSLv3 mà không rõ ràng ghim để TLSv1.0 (và bạn không thể ghim để TLSv1.1 hoặc TLSv1.2).
  • Bạn không thể tắt Nén TLS.
  • Bạn không thể sử dụng SNI, buộc mọi máy chủ bạn đang cố gắng nói chuyện không sử dụng SNI (hoặc bạn cần tắt xác minh TLS cho các máy chủ đó).
  • Bạn không thể yêu cầu OpenSSL thích chuỗi ngắn hơn, nhưng vẫn đáng tin cậy trên chuỗi được máy chủ cấp một cách rõ ràng. Điều này có nghĩa rằng một số máy chủ mà nếu không có thể được xác nhận sẽ thất bại nếu kho lưu trữ chứng chỉ cơ bản loại bỏ các chứng chỉ gốc 1024 bit yếu.
  • Trên Pythons cũ hơn (2.6), bạn không thể đặt mật mã, nghĩa là bạn đang mắc kẹt với bất kỳ OpenSSL nào được sử dụng làm mặc định (thường dẫn đến không an toàn hoặc ít hơn lựa chọn tối ưu).

Theo như những gì bạn nên làm, điều đó thực sự tùy thuộc vào bạn.Nếu bạn đang cài đặt từ PyPI chính nó rất nhiều những điều này chỉ đơn giản là không quan trọng nhiều bởi vì chúng tôi vô hiệu hóa chúng ở phía máy chủ thay vì dựa vào các khách hàng để thực hiện chúng. Tuy nhiên yêu cầu (thư viện pip cơ bản sử dụng để truy cập vào một kho lưu trữ) đặt ra những cảnh báo này (và pip không im lặng họ) vì PyPI thường không phải là nơi duy nhất bạn sẽ kết nối và những nơi khác có thể hoặc không thể lấy cùng một biện pháp phòng ngừa mà PyPI có.

Nguồn: Tôi là một nhà phát triển pip lõi và quản trị viên của PyPI.

+0

Thú vị, cảm ơn. Vì vậy, nó có vẻ giống như một giải pháp không hoàn hảo, vì vấn đề này có lẽ không nổi tiếng. Tôi không có ý tưởng về điều này cho đến khi tôi chạy một phiên bản mới nhất của pip. Tuy nhiên, có vẻ như tôi có thể nhận được tất cả các gói tôi cần để pip hoạt động an toàn từ pypi và tôi nên an toàn khi làm như vậy vì bạn đã nói hầu hết các vấn đề đều bị dừng phía máy chủ (mặc dù bạn không nói tất cả trong số đó là). Sau đó, tôi có thể cài đặt bất cứ điều gì khác tôi cần vì pip sẽ được sử dụng openssl. Có thể thực hiện được, nhưng stlil không có vẻ lý tưởng. Hệ sinh thái là một chút hỗn loạn. – orblivion

+1

Như đã chỉ ra [ở đây] (http://stackoverflow.com/a/29202163), bạn có thể chuyển sang sử dụng 'PyOpenSSL' với' requests' qua 'pips cài đặt yêu cầu [an ninh] '. Bằng cách này, bạn chỉ nhận được cảnh báo cho rằng việc sử dụng 'pip' và, như đã đề cập trong câu trả lời ở trên, kết nối với PyPI chính nó không nên quá lo lắng vì họ đã xử lý các vấn đề bảo mật phía máy chủ này. –

0

Tôi đọc các cuộc thảo luận hiện có và nghĩ tốt, những gì tôi phải làm gì bây giờ?

Sau đó, tôi nhận ra rằng các vấn đề cơ bản tôi đã có được rằng tôi là trên Ubuntu 14.04, và các phiên bản của nó tàu python là thiếu sót. Vì vậy, tôi nâng cấp lên 15.04.

+0

Thật không may, vì 14.04 là một LTS. Tôi không mong muốn nâng cấp. – orblivion

+0

Vâng, đúng vậy, và tôi thích ý tưởng sử dụng LTS. Tôi đã nghĩ đến thực tế của điều đó là các hệ thống LTS này sẽ càng ít an toàn hơn theo thời gian, bởi vì ngay cả khi chúng cung cấp các bản vá bảo mật, những thứ như thế này sẽ không được sửa chữa: ( – pwaller

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