Bắt đầu với Python 3. 11. 0, Trăn 3. 10. 7, Trăn 3. 9. 14, Trăn 3. 8. 14 và Python 3. 7. 14, các tạo phẩm phát hành CPython được ký bổ sung với Sigstore [ngoài các chữ ký GPG hiện có]
Trang này cung cấp hướng dẫn về cách xác minh chữ ký Sigstore với tư cách là người tiêu dùng CPython và phác thảo một số động lực để sử dụng các chữ ký bổ sung này
Xác minh Sigstore của Bản phát hành CPythonGiới thiệu về Sistore
Sigstore là một tiêu chuẩn mới để ký, xác minh và bảo vệ phần mềm. Dự án Sigstore là một bộ công cụ và dịch vụ
- cơ quan cấp chứng chỉ
- nhật ký minh bạch chữ ký
- nhiều ứng dụng ký kết dành riêng cho hệ sinh thái [chẳng hạn như https. //pypi. org/p/sigstore/]
Ở cấp độ cao, Sigstore sử dụng cơ quan cấp chứng chỉ để liên kết danh tính OpenID Connect [OIDC] với các khóa tạm thời và sử dụng nhật ký minh bạch để xuất bản kết quả của các sự kiện ký kết. Điều này giúp loại bỏ sự cần thiết của người ký để quản lý khóa riêng. Nó cũng cho phép người dùng xác minh chữ ký dựa trên các đặc điểm của danh tính OIDC, chẳng hạn như địa chỉ email
Thông tin chi tiết hơn về quy trình ký và sự tương tác của các công cụ và dịch vụ này được cung cấp trong tài liệu của Sigstore. Ngoài ra, bạn có thể tìm thấy mô hình bảo mật cho Sigstore tại đây
Xác minh các tạo phẩm phát hành CPython với Sigstore
Xác minh yêu cầu sự hiện diện của ba tệp. tạo phẩm phát hành được đề cập, chữ ký và chứng chỉ [hai cái cuối cùng được gọi là "tài liệu xác minh". Ví dụ, đối với Python 3. 10. 7 nguồn phát hành, bạn sẽ tải xuống ba tệp sau
$ wget //www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
$ wget //www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz.sig
$ wget //www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz.crt
Các tài liệu xác minh này phải tồn tại cho tất cả các thành phần tạo phẩm của bản phát hành và được liệt kê trên trang tải xuống cùng với các thành phần tạo phẩm tương ứng của chúng
Ngoài ra, việc xác minh yêu cầu biết trước về danh tính của người ký. Đối với các bản phát hành CPython, đây là các địa chỉ email @python.org
của người quản lý bản phát hành cho bản phát hành nhất định. Trình quản lý phát hành cho các bản phát hành hiện tại và sắp tới như sau
- Trong khi
1 là 3. 7 người quản lý phát hành, các bản phát hành trong tương lai sẽ được ký bởi$ python -m pip install -r //raw.githubusercontent.com/sigstore/sigstore-python/main/install/requirements.txt
pablogsal@python.org
Cuối cùng, xác minh yêu cầu ứng dụng khách Sigstore. Sử dụng https. //pypi. org/p/sigstore/ được khuyến nghị
Để cài đặt với các đảm bảo về thời gian cài đặt bổ sung bao gồm kiểm tra hàm băm và ghim phiên bản, bạn có thể chạy phần sau để cài đặt từ một tệp yêu cầu được chỉ định đầy đủ
$ python -m pip install -r //raw.githubusercontent.com/sigstore/sigstore-python/main/install/requirements.txt
Ngoài ra, để cài đặt như bình thường mà không có những đảm bảo này
$ python -m pip install sigstore
Cuối cùng, trong thư mục mà bạn đã tải xuống tạo phẩm phát hành và tài liệu xác minh, bạn có thể chạy phần sau
$ python -m sigstore verify identity \
--certificate Python-3.11.0.tgz.crt \
--signature Python-3.11.0.tgz.sig \
--cert-identity pablogsal@python.org \
--cert-oidc-issuer //accounts.google.com \
Python-3.11.0.tgz
Chạy lệnh này sẽ dẫn đến kết quả đầu ra
$ python -m pip install -r //raw.githubusercontent.com/sigstore/sigstore-python/main/install/requirements.txt
3, cho biết chữ ký hợp lệ[Lưu ý rằng ngoài việc xác minh chữ ký và chứng chỉ, lệnh này còn thực hiện xác minh trực tuyến rằng có một mục nhập tương ứng trong nhật ký minh bạch chữ ký. Xác minh ngoại tuyến chưa được hỗ trợ]
Ngôn ngữ lập trình python có thể được sử dụng để tạo chứng chỉ tự ký. Chứng chỉ tự ký có thể được sử dụng cho các hệ thống nội bộ không cần sự tin tưởng công khai tự động từ CA [Cơ quan chứng nhận] nổi tiếng. Nhược điểm của việc sử dụng chứng chỉ tự ký là chúng phải được tin cậy rõ ràng, nhưng đôi khi điều này được ưu tiên để tăng tính bảo mật. Dưới đây, chúng tôi sẽ trình bày một ví dụ về việc sử dụng mô-đun yêu cầu python để tin cậy toàn bộ chuỗi chứng chỉ hoặc trong trường hợp này, một chứng chỉ trong chuỗi được tự ký. Là điều kiện tiên quyết cho bài viết này, hãy đọc hướng dẫn của chúng tôi về cách tạo CSR trong python để tạo cặp khóa công khai/riêng tư được sử dụng trong ví dụ này
Cách tạo chứng chỉ tự ký bằng Python
Nếu bạn không cần chứng chỉ SSL đáng tin cậy công khai, bạn có thể sử dụng chứng chỉ tự ký để mã hóa SSL nội bộ. Xin lưu ý rằng bạn sẽ phải tin tưởng một cách rõ ràng vào chứng chỉ tự ký, nó có thể đơn giản hóa rất nhiều việc triển khai SSL của bạn trên các máy chủ nội bộ nếu bạn có thể tạo chứng chỉ một cách nhanh chóng mà không cần phải tương tác với CA bên ngoài
Đầu tiên, bạn sẽ tạo một khóa riêng. Đối với ví dụ này, chúng tôi sẽ sử dụng RSA có kích thước khóa là 2048, kích thước bit được khuyến nghị thấp nhất
from cryptography.hazmat.primitives.asymmetric import rsa
key = rsa.generate_private_key[
public_exponent=65537,
key_size=2048,
]
Tiếp theo, tạo chứng chỉ tự ký. Chứng chỉ sẽ chứa dữ liệu về bạn là ai và tổ chức của bạn là ai. Lưu ý rằng đối tượng và tổ chức phát hành sẽ luôn giống nhau đối với chứng chỉ tự ký. Đây cũng là sự tin cậy của bất kỳ chứng chỉ Root CA công khai hoặc riêng tư nào, bởi vì chứng chỉ gốc cũng được tự ký
Sau khi viết mã python để tạo chứng chỉ, nó phải được ký bằng khóa riêng được tạo ở bước trước
________số 8_______Bây giờ bạn đã có chứng chỉ tự ký được tạo bởi ngôn ngữ lập trình python
Tin tưởng chứng chỉ tự ký trong các yêu cầu Python
Nếu Hệ điều hành [Hệ điều hành] hoặc ứng dụng mà bạn đang chạy mã yêu cầu python của mình không tin cậy các chứng chỉ bảo vệ máy chủ mà bạn đang kết nối, bạn sẽ nhận được lỗi sau hoặc một lỗi tương tự
requests.exceptions.SSLError: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Trong trường hợp bạn thấy lỗi này, bạn sẽ cần phải tin tưởng một cách rõ ràng các chứng chỉ được trả về bởi hệ thống bên ngoài nếu chúng thực sự đáng tin cậy. Để thực hiện việc này, hãy sử dụng tham số verify
trong mã yêu cầu của bạn để tin cậy chứng chỉ
requests.post[url, data=data, verify='/path/to/certificate.pem']
Lưu ý rằng nếu chứng chỉ mà bạn đang tin tưởng là chứng chỉ tự ký, thì lệnh trên sẽ hoạt động như hiện tại. Nếu chứng chỉ là chứng chỉ Root CA với các chứng chỉ trung gian cũng nằm trong chuỗi tin cậy, hãy đảm bảo bao gồm các chứng chỉ trung gian trong. pem mà bạn đang trỏ đến
Xác định loại khóa công khai hoặc khóa riêng trong Python
Các ví dụ trên đã sử dụng thuật toán RSA khi tạo cặp khóa. Để xác minh loại khóa này hoặc để kiểm tra loại khóa không xác định trong python, bạn có thể sử dụng phương thức isinstance
truyền vào khóa và thuật toán. Xem bên dưới để biết ví dụ về cách xác định loại khóa của khóa chung hoặc khóa riêng trong python
public_key = cert.public_key[]
if isinstance[public_key, rsa.RSAPublicKey]:
# This is an RSA key
elif isinstance[public_key, ec.EllipticCurvePublicKey]:
# This is an EC key
else:
# It's neither an RSA or EC key.
Lưu ý rằng trong ví dụ trên, thuật toán khóa công khai đang được kiểm tra. Nếu bạn muốn biết thuật toán khóa riêng, trước tiên bạn phải lấy khóa chung để chuyển vào séc isinstance
Phần kết luận
Bài viết này trình bày cách lập trình tạo chứng chỉ tự ký bằng python. Ngoài ra, nó đã trình bày cách tin cậy chứng chỉ tự ký trong thư viện yêu cầu python. Để lại cho chúng tôi một nhận xét nếu bạn có bất kỳ câu hỏi nào hoặc muốn xem các ví dụ bổ sung về việc sử dụng hoặc tin tưởng các chứng chỉ tự ký trong python