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/SSLGiao 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àyBâ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 PythonKhi 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ùngKhi 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]
0Thư 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
- Tạo khóa RSA riêng
- Tạo yêu cầu ký chứng chỉ [CSR] bằng khóa riêng
- 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]
1Nế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]
2Nế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]
00Cả 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]
4Tạ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]
5Bạ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]
6Tạ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]
7Chạ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]
8Trong đ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]
0Lư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]
06import requests
response=requests.get['//www.expired.badssl.com/']
print[response]
1Tóm tắtTrong 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]
07Sau đó, 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