Giấy chứng nhận ký hiệu Python

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 CPython

Giớ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

Phát hành APP Trình quản lý phát hành 3. 7PEP 537____13_______*3. 8PEP 569____14_______3. 9PEP 596____14_______3. 10PEP 619____13_______3. 11PEP 664____13_______3. 12PEP 693____1_______0
  • Trong khi
    $ python -m pip install -r //raw.githubusercontent.com/sigstore/sigstore-python/main/install/requirements.txt
    
    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 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

Làm cách nào để tạo chứng chỉ SSL Python?

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ỉ

Python tìm chứng chỉ SSL ở đâu?

Trên Windows, Python tự động tải chứng chỉ từ kho chứng chỉ Windows . Điều này chỉ nên hoạt động với PyOxidizer. Trên tất cả các nền tảng, Python cố tải chứng chỉ từ các vị trí mặc định được biên dịch vào thư viện OpenSSL đang được sử dụng.

Chứng chỉ tự ký có đáng tin cậy không?

Không được trình duyệt và người dùng tin cậy . Self-signed SSL certificates are not trusted by browsers, because they are generated by your servers, and not validated by trusted CAs, like Cloudflare and Go Daddy.

Chủ Đề