如何创建自签名证书

community.crypto 集合提供了多个模块,可以创建私钥、证书签名请求和证书。本指南介绍如何创建自签名证书。

要创建任何类型的证书,您始终必须从私钥开始。您可以使用 community.crypto.openssl_privatekey 模块 来创建私钥。如果您只指定 path,将使用默认参数。这将生成一个 4096 位 RSA 私钥

- name: Create private key (RSA, 4096 bits)
  community.crypto.openssl_privatekey:
    path: /path/to/certificate.key

您可以指定 type 来选择其他密钥类型,size 来选择不同的密钥大小(仅适用于 RSA 和 DSA 密钥),或者 passphrase 如果您想存储受密码保护的密钥

- name: Create private key (X25519) with password protection
  community.crypto.openssl_privatekey:
    path: /path/to/certificate.key
    type: X25519
    passphrase: changeme

要创建一个非常简单的自签名证书,不包含任何特定信息,您可以直接使用 community.crypto.x509_certificate 模块

- name: Create simple self-signed certificate
  community.crypto.x509_certificate:
    path: /path/to/certificate.pem
    privatekey_path: /path/to/certificate.key
    provider: selfsigned

(如果您为私钥使用了 passphrase,则必须提供 privatekey_passphrase。)

您可以使用 selfsigned_not_after 来定义证书的过期时间(默认:大约 10 年),并使用 selfsigned_not_before 来定义证书的有效起始时间(默认:现在)。

要定义证书的更多属性,如主题、主题备用名称 (SAN)、密钥用法、名称约束等,您需要先创建一个证书签名请求 (CSR) 并将其提供给 community.crypto.x509_certificate 模块。如果您不需要 CSR 文件,可以使用 community.crypto.openssl_csr_pipe 模块,如下例所示。(要将其存储到磁盘,请改用 community.crypto.openssl_csr 模块。)

- name: Create certificate signing request (CSR) for self-signed certificate
  community.crypto.openssl_csr_pipe:
    privatekey_path: /path/to/certificate.key
    common_name: ansible.com
    organization_name: Ansible, Inc.
    subject_alt_name:
      - "DNS:ansible.com"
      - "DNS:www.ansible.com"
      - "DNS:docs.ansible.com"
  register: csr

- name: Create self-signed certificate from CSR
  community.crypto.x509_certificate:
    path: /path/to/certificate.pem
    csr_content: "{{ csr.csr }}"
    privatekey_path: /path/to/certificate.key
    provider: selfsigned