Python yêu cầu bắt tay TLS

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

Chủ Đề