Yêu cầu Python sử dụng phiên bản TLS nào?

Nếu bạn đang sử dụng Python cũ hơn mà không có triển khai TLS an toàn nhất, thì đây là năm để nghiêm túc nâng cấp. Nếu không, vào tháng 6 tới, bạn có thể không cài đặt được các gói "pip install" từ PyPI.

Người bảo trì của PyPI Donald Stufft gần đây đã thông báo rằng python. org và các trang web có liên quan sẽ bắt đầu vô hiệu hóa các phiên bản TLS cũ 1. 0 và 1. 1. Thay đổi này được áp đặt cho chúng tôi bởi mạng phân phối nội dung của chúng tôi, Fastly, để đáp ứng với thay đổi do Hội đồng tiêu chuẩn bảo mật ngành thẻ thanh toán áp đặt cho họ. Để tiếp tục phục vụ các trang web nhận thanh toán bằng thẻ tín dụng, Fastly bắt buộc phải vô hiệu hóa các phiên bản TLS cũ, không an toàn. Vì các máy chủ của PSF, bao gồm cả PyPI, sử dụng Fastly, các phiên bản cũ của TLS cũng sẽ bị vô hiệu hóa.

Được viết nhanh vào tháng 10 năm 2015,
Đã xảy ra sự cố bảo mật hệ thống và nghiêm trọng với các phiên bản TLS trước đó và phiên bản tiền nhiệm của nó, SSL, bao gồm POODLE, Heartbleed và LOGJAM. Những điều này có nguy cơ phá vỡ niềm tin vào các phương thức giao tiếp an toàn cơ bản, khiến cả bạn và khách hàng của bạn gặp phải các vi phạm bảo mật. Các hành động của Hội đồng PCI DSS nhằm duy trì mức tối thiểu cao là một bước hướng tới đảm bảo tính bảo mật của tất cả các giao dịch kinh doanh trực tuyến.
Có hai thời hạn để nâng cấp Python của bạn lên phiên bản có TLS mới nhất. Lần đầu tiên đến sớm, vào ngày 30 tháng 4 năm 2017, khi trăn. các trang web org không có Chứng chỉ xác thực mở rộng sẽ ngừng hỗ trợ TLS 1. 0 và 1. 1. Các trang web này bao gồm.

  • testpypi. con trăn. tổ chức
  • kiểm tra. pypi. tổ chức
  • các tập tin. pythonhosted. tổ chức

Warehouse, sản phẩm kế thừa trong tương lai của PyPI, cũng sẽ bị ảnh hưởng bởi thời hạn cuối tháng 4, vì Warehouse phục vụ các tệp từ các tệp. pythonhosted. tổ chức.

Hạn chót quan trọng hơn là ngày 30 tháng 6 năm 2018. Vào ngày đó, tất cả những con trăn còn lại. org, bao gồm cả PyPI, sẽ không còn hỗ trợ TSL 1. 0 và 1. 1. Các phiên bản Python cũ hơn không triển khai TLSv1. 2 sẽ bị cấm truy cập PyPI.

Xem bên dưới để biết hướng dẫn kiểm tra phiên bản TLS của thông dịch viên của bạn. 1

Stufft viết: "Tôi sẽ xem xét khả năng tổ chức một số 'thời gian tạm dừng' của TLSv1 theo lịch trình. 0 và TLSv1. 1 trước ngày giới hạn để thử và giúp mọi người tìm những địa điểm cần cập nhật. Mọi sự cố mất điện theo lịch trình sẽ được đăng lên trạng thái. con trăn. org trước khi xảy ra. "

Người dùng Mac cần đặc biệt chú ý. Cho đến nay, hệ thống Python đi kèm với MacOS vẫn chưa hỗ trợ TLSv1. 2 trong mọi phiên bản MacOS; . 2 May mắn thay, thật dễ dàng để cài đặt Python hiện đại cùng với hệ thống MacOS Python. Tải xuống Python 3. 6 từ trăn. org hoặc cho Python 2. 7 với TLS mới nhất, hãy sử dụng Homebrew. Cả hai phương pháp cài đặt Python sẽ tiếp tục hoạt động sau tháng 6 năm 2018.


1. Để kiểm tra phiên bản TLS của trình thông dịch Python của bạn, hãy cài đặt gói "yêu cầu" và chạy lệnh. Ví dụ: đối với Python 2.

python2 -m pip install --upgrade requests
python2 -c "nhập yêu cầu; in[yêu cầu. nhận ['https. //www. chao ôi. com/a/kiểm tra', xác minh=Sai]. json[]['tls_version']]"


Hoặc Python 3.

python3 -m pip install --upgrade requests
python3 -c "nhập yêu cầu; in[yêu cầu. nhận ['https. //www. chao ôi. com/a/kiểm tra', xác minh=Sai]. json[]['tls_version']]"


Nếu bạn thấy "TLS 1. 2", TLS của thông dịch viên của bạn đã được cập nhật. Nếu bạn thấy "TLS 1. 0" hoặc lỗi như "phiên bản giao thức cảnh báo tlsv1", thì bạn phải nâng cấp. ↩

2. Lý do triển khai TLS của Python bị tụt lại phía sau trên macOS là Python tiếp tục sử dụng OpenSSL, mà Apple đã ngừng cập nhật trên macOS. Trong năm tới, nhóm Cơ quan đóng gói Python sẽ điều tra việc chuyển pip sang thư viện "SecureTransport" của riêng Apple như một giải pháp thay thế cho OpenSSL, điều này sẽ cho phép các trình thông dịch Python cũ chỉ sử dụng TLS hiện đại với pip. "Đây là một nỗ lực không hề nhỏ," Stufft viết, "Tôi không chắc nó sẽ hoàn thành. "

Về lâu dài, bản thân trình thông dịch Python sẽ dễ dàng theo kịp các phiên bản TLS, nếu nó không sử dụng OpenSSL trên các nền tảng như macOS và Windows nơi OpenSSL không được cung cấp cùng với HĐH. Cory Benfield và Christian Heimes đề xuất thiết kế lại các giao diện TLS của thư viện tiêu chuẩn để giúp trao đổi OpenSSL dễ dàng hơn với các triển khai TLS dựa trên nền tảng. ↩

Ngày nay, chúng ta làm hầu như mọi thứ trực tuyến. đặt chuyến bay, thanh toán hàng hóa, chuyển tiền ngân hàng, nhắn tin cho bạn bè, lưu trữ tài liệu, v.v. Nhiều việc chúng tôi yêu cầu cung cấp thông tin nhạy cảm như chi tiết thẻ tín dụng và thông tin ngân hàng của chúng tôi. Nếu một trang web sử dụng mạng không an toàn, tin tặc độc hại có thể dễ dàng đánh cắp thông tin người dùng. Đây là lý do tại sao mã hóa rất quan trọng

Giao thức bảo mật tầng vận chuyển [TLS] là biện pháp bảo vệ tối ưu thông tin người dùng trên các trang web và ứng dụng web. TLS sử dụng thuật toán mật mã khó bẻ khóa để đảm bảo rằng không ai khác ngoài máy chủ web và máy khách web có thể đọc hoặc sửa đổi dữ liệu được truyền

Trong bài viết này, chúng ta sẽ khám phá TLS và cách sử dụng Python để kiểm tra tính hợp lệ của chứng chỉ TLS của trang web. Sau đó, chúng tôi sẽ hướng dẫn các bước để thêm TLS vào ứng dụng Python của bạn trên Linux

Hiểu TLS/SSL

Giao thức TLS, giao thức kế thừa của giao thức lớp cổng bảo mật [SSL], bảo vệ dữ liệu bằng mã hóa. Khi người dùng gửi thông tin của họ đến một trang web, TLS sẽ mã hóa thông tin đó trước khi gửi. Sau đó, chỉ máy chủ có cùng khóa công khai với máy khách mới có thể mở thư. Quy tắc này cũng được áp dụng khi máy chủ gửi thông tin lại cho máy khách. Chỉ máy khách có khóa tương ứng mới có thể đọc dữ liệu

Để trang web sử dụng giao thức TLS, bạn phải cài đặt chứng chỉ TLS/SSL hợp lệ [thường được gọi là chứng chỉ SSL]. Khi bạn cài đặt chứng chỉ, nó sẽ nâng cấp trang web từ HTTP lên HTTPS, một giao thức truyền an toàn hơn. Chứng chỉ là một tệp dữ liệu chứa danh tính của trang web và khóa chung để mở thông báo tải trọng

Chứng chỉ SSL phải hợp lệ để hoạt động. Điều này có nghĩa là không chỉ cơ quan cấp chứng chỉ đáng tin cậy [CA] phải ký tên mà chứng chỉ còn phải đang hoạt động. Mọi chứng chỉ đều có ngày cấp và ngày hết hạn. Chứng chỉ không còn hiệu lực sau ngày hết hạn

Các trang web không có chứng chỉ SSL hợp lệ có ít chỉ số hiển thị. Thứ nhất, URL trong thanh địa chỉ sử dụng tiền tố

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
2 thay vì
import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
3. Ngoài ra, không có biểu tượng khóa — biểu tượng mà trình duyệt sử dụng để biểu thị một trang web an toàn — bên cạnh URL. Hãy thận trọng với những gì bạn chia sẻ nếu bạn nhận thấy một trong hai dấu hiệu này

Bây giờ chúng ta đã khám phá TLS-over-SSL [TLS/SSL], hãy xem cách triển khai nó bằng Python

Làm việc với TLS/SSL trong Python

Khi xây dựng máy chủ web bằng Python, điều quan trọng là phải biết cách thêm TLS/SSL vào ứng dụng của chúng ta. Trước khi tìm hiểu cách thực hiện, hãy xem cách sử dụng Python để xác minh tính hợp lệ của chứng chỉ SSL của trang web

Kiểm tra xem một trang web có chứng chỉ SSL hợp lệ hay không

Nếu chúng tôi muốn kiểm tra tính hợp lệ của chứng chỉ SSL của trang web, chúng tôi có thể dễ dàng làm như vậy bằng cách chạy tập lệnh Python như thế này

import requests

response=requests.get['//twitter.com/']

print[response]

Đoạn mã trên nhập mô-đun Python

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
4 và sử dụng nó để thực hiện yêu cầu
import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
5 tới trang web Twitter. [Để chạy tập lệnh, bạn phải cài đặt mô-đun
import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
4 trong Python bằng pip]. Chúng tôi có thể thay thế URL của Twitter bằng URL của trang web có chứng chỉ SSL mà chúng tôi muốn xác minh. Biến
import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
7 lưu trữ giá trị nhận được mà mã in ở dòng cuối cùng

Khi chúng tôi thực thi mã, chúng tôi nhận được thông báo

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
8, nghĩa là trang Twitter đang sử dụng chứng chỉ SSL hợp lệ [như mong đợi]

Bây giờ, chúng tôi thực hiện một yêu cầu

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
5 đến một trang web khác. Lần này chúng tôi sử dụng một trang web mà chúng tôi biết là thiếu chứng chỉ SSL hợp lệ

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]

Lần này, chúng tôi nhận được lỗi cho biết quá trình xác minh chứng chỉ không thành công

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
0

Thư viện SSL Python

Chúng tôi sử dụng thư viện SSL Python để cung cấp mã hóa TLS trong giao tiếp dựa trên ổ cắm giữa máy khách và máy chủ Python. Nó sử dụng mật mã và thông báo để bảo mật dữ liệu và phát hiện các nỗ lực thay đổi trong mạng. Chứng chỉ kỹ thuật số cung cấp xác thực

Thư viện SSL hỗ trợ Windows, macOS và các hệ thống UNIX hiện đại khác. Nó cũng yêu cầu OpenSSL để hoạt động.  

Đến cuối bài viết này, chúng tôi sẽ sử dụng thư viện Python SSL để bao bọc ổ cắm dựa trên kết nối của chúng tôi bằng chứng chỉ SSL mà chúng tôi tạo trong phần sau

Tạo chứng chỉ SSL tự ký bằng Python

Bây giờ chúng ta đã biết cách xác minh tính hợp lệ của TLS/SSL trên một trang web, hãy xem cách chúng ta có thể sử dụng nó trên máy chủ web Python

Chúng tôi có thể nhanh chóng tạo và sử dụng chứng chỉ tự ký miễn phí để phát triển cục bộ. Tuy nhiên, nếu chúng tôi dự định triển khai trang web hoặc ứng dụng trên internet, chúng tôi phải mua chứng chỉ SSL từ nhà đăng ký tên miền đáng tin cậy [như GoDaddy và NameCheap].  

Quá trình tự tạo chứng chỉ SSL cho ứng dụng Python cục bộ của chúng tôi có ba bước

  1. Tạo khóa RSA riêng
  2. Tạo yêu cầu ký chứng chỉ [CSR] bằng khóa riêng
  3. Ký yêu cầu CSR để tạo chứng chỉ

Sau khi tạo chứng chỉ SSL, chúng tôi sẽ sử dụng nó trong ứng dụng Python khi thực hiện các yêu cầu API

Một lần nữa, luôn chỉ mua chứng chỉ SSL từ cơ quan cấp chứng chỉ được ủy quyền. Nhiều công ty đăng ký miền bao gồm chứng chỉ SSL miễn phí khi bạn mua miền từ họ.  

Hãy bắt đầu

Điều kiện tiên quyết. Cài đặt OpenSSL trên Linux

Đối với người dùng Linux, rất có thể OpenSSL đã có trên máy của bạn. Tuy nhiên, nếu bạn chưa có nó, thì bạn có thể cài đặt nó bằng trình quản lý gói của mình. Lệnh sau cài đặt OpenSSL trong các bản phân phối dựa trên Debian và Ubuntu

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
1

Nếu bạn không chắc mình đã cài đặt OpenSSL trên máy chưa, bạn có thể kiểm tra bằng cách chạy lệnh sau

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
2

Nếu bạn có nó, bạn sẽ nhận được số phiên bản. Nhưng nếu sau khi chạy lệnh trên mà gặp lỗi unrecognized command thì bạn phải cài đặt

Tạo khóa riêng

Chúng tôi có thể tạo khóa riêng có hoặc không có cụm mật khẩu bảo vệ. Để thêm cụm mật khẩu, chúng tôi chỉ cần sử dụng mật mã trong lệnh, chẳng hạn như

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
00

Cả hai tùy chọn bên dưới đều dùng để tạo khóa riêng RSA 2048 bit, nhưng tùy chọn đầu tiên tạo khóa mà không cần cụm mật khẩu

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
4

Tạo CSR bằng khóa

Trong bước này, chúng tôi sử dụng khóa riêng được tạo ở bước trước để tạo CSR. Để làm điều này, hãy chạy lệnh sau

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
5

Bạn phải điền thêm một số thông tin về chứng chỉ trong dòng lệnh. Cung cấp nó và nhấn Enter khi hoàn tất

Ký chứng chỉ bằng khóa

Bước cuối cùng là ký yêu cầu tạo chứng chỉ. Chạy lệnh sau

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
6

Tại đây, chúng tôi đang ký yêu cầu chứng chỉ bằng cùng một khóa được sử dụng để tạo yêu cầu đó. Quy trình này giải thích tại sao nó được gọi là chứng chỉ “tự ký”

Bạn có thể xem chi tiết chứng chỉ bằng cách chạy lệnh sau

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
7

Chạy máy chủ Python HTTPS với TLS/SSL

Bây giờ chúng tôi đã tạo thành công chứng chỉ tự ký, chúng tôi sử dụng nó để tạo máy chủ HTTPS sử dụng mã hóa TLS trong suốt quá trình giao tiếp với máy khách.  

Chương trình Python bên dưới khởi động máy chủ HTTPS trên máy chủ cục bộ của bạn tại cổng 443

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
8

Trong đoạn mã trên, chúng tôi đã nhập

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
01 và
import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
02. Sau đó, chúng tôi đã gọi phương thức
import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
03 trên
import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
04, chuyển vào địa chỉ và số cổng của máy chủ. Tiếp theo, chúng tôi bọc ổ cắm bằng SSL bằng cách chỉ định đường dẫn đến chứng chỉ của chúng tôi trong phương thức
import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
05. Cuối cùng, chúng tôi đã chạy máy chủ ở cuối tệp

Để kết nối máy khách, bạn có thể sử dụng mô-đun yêu cầu Python để thực hiện yêu cầu GET tới địa chỉ máy chủ

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
0

Lưu ý rằng đoạn mã trên phải được thêm vào một tệp khác với mã máy chủ. Chạy cái này sẽ kết nối máy khách với máy chủ và trả về thông báo

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
06

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
1Tóm tắt

Trong bài viết này, chúng ta đã tìm hiểu về TLS/SSL và tầm quan trọng của việc có chứng chỉ kỹ thuật số hợp lệ trên các trang web của chúng ta. Chúng tôi cũng đã xem cách xác minh SSL trên một trang web bằng cách sử dụng phương pháp

import requests

response=requests.get['//www.expired.badssl.com/']

print[response]
07

Sau đó, chúng tôi đã giới thiệu thư viện SSL Python và hướng dẫn quy trình tạo và sử dụng máy chủ web được bảo mật TLS/SSL trong Python. Chúng tôi đã tạo chứng chỉ tự ký bằng OpenSSL và thêm chứng chỉ vào kết nối ổ cắm HTTP của mình trước khi chạy máy chủ

Khi khối lượng giao dịch trực tuyến tiếp tục tăng, tội phạm mạng sẽ tiếp tục phát triển về quy mô và độ phức tạp. Sử dụng chứng chỉ SSL trên trang web của chúng tôi không chỉ ngăn chặn hầu hết các nỗ lực tấn công trang web của bạn mà còn giúp trang web trở nên đáng tin cậy hơn đối với khách truy cập. Hãy xem bài viết này để tìm hiểu thêm về lý do tại sao bạn nên sử dụng HTTPS

Thảo luận về blog này trên Discord

Tham gia Cộng đồng DevSecOps trên Discord để thảo luận về chủ đề này và hơn thế nữa với các học viên tập trung vào bảo mật khác

Yêu cầu Python có sử dụng TLS không?

Yêu cầu sử dụng mô-đun ssl của thư viện chuẩn Python bên trong - mô-đun này hỗ trợ các phiên bản SSL và TLS khác nhau . Bạn có thể yêu cầu sử dụng một giao thức cụ thể [như TLSv1] bằng cách tạo HTTPAdapter tùy chỉnh phiên bản PoolManager được tạo.

Phiên bản TLS nào được sử dụng?

Hiện tại, TLS 1. 2 và TLS 1. 3 là các phiên bản TLS được sử dụng phổ biến nhất. Sau một số nâng cấp lớn, TLS's 1. 3 đã nổi lên như một trong những giao thức bảo mật được sử dụng rộng rãi nhất và an toàn nhất cho các trang web cần dịch vụ mã hóa cao cấp.

Là TLS 1. 2 giống như HTTPS?

TLS 1. 2 vẫn là phiên bản được đề xuất nếu bạn đang đọc nó vào mùa Xuân/Hè 2020. Hãy tóm tắt lại. HTTPS chỉ là giao thức HTTP nhưng được mã hóa dữ liệu bằng SSL/TLS . SSL là giao thức ban đầu và hiện không được dùng nữa được tạo tại Netscape vào giữa những năm 90.

Yêu cầu Python có sử dụng HTTPS không?

Yêu cầu xác minh chứng chỉ SSL cho yêu cầu HTTPS , giống như trình duyệt web.

Chủ Đề