Ansible:创建自签名 SSL 证书和密钥

Tom*_*Tom 8 ssl openssl ansible

我想创建一个自签名证书以将其与 stunnel 一起使用,以便在 redis 服务器和客户端之间安全地传输我的 redis 流量。我正在使用此命令生成证书,并且工作正常。

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/stunnel/redis-server.key -out /etc/stunnel/redis-server.crt
Run Code Online (Sandbox Code Playgroud)

由于我使用 Ansible 进行配置,我想知道如何使用模块将其转换为更 Ansible 的方式。实际上有一个名为openssl_certificate Ansible 模块的模块,它声明“该模块允许(重新)生成 OpenSSL 证书。” . 我尝试使用该模块生成证书,但无法使其正常工作。

- name: Generate a Self Signed OpenSSL certificate
  openssl_certificate:
    path: /etc/stunnel/redis-server.crt
    privatekey_path: /etc/stunnel/redis-server.key
    csr_path: /etc/stunnel/redis-server.csr
    provider: selfsigned
Run Code Online (Sandbox Code Playgroud)

从文档来看,我无法指定以下参数-x509 -nodes -days 3650 -newkey rsa:2048。当然,我也可以拆分密钥和证书生成,但这仍然不允许我使用 Ansible 模块,对吗?

给出的例子:

openssl genrsa -out /etc/stunnel/key.pem 4096

openssl req -new -x509 -key /etc/stunnel/key.pem -out /etc/stunnel/cert.pem -days 1826
Run Code Online (Sandbox Code Playgroud)

我想知道以下几点:

  • a) 如何从原始命令获得相同的结果,但使用 Ansible 模块?
  • b) 有没有更好的方法来使用 Ansible 管理自签名证书?

Tyh*_*hal 12

- openssl_privatekey:
    path: /etc/stunnel/redis-server.key
    size: 2048 

- openssl_csr:
    path: /etc/stunnel/redis-server.csr
    privatekey_path: /etc/stunnel/redis-server.key

- openssl_certificate:
    provider: selfsigned
    path: /etc/stunnel/redis-server.crt
    privatekey_path: /etc/stunnel/redis-server.key
    csr_path:/etc/stunnel/redis-server.csr
Run Code Online (Sandbox Code Playgroud)
  • “-newkey rsa:2048”在私钥上处理“大小”
  • “-x509”是默认值
  • “-nodes”和“-days 3650”我找不到

  • `openssl_certificate` 需要一个 `provider: selfsigned`。否则这对我有用。我猜想,可以使用“selfsigned_not_after”来实现“-days”。 (5认同)

Dav*_*3o3 7

您可以通过 2 个步骤实现此目的(使用 Ansible 5.7.1 进行测试):

- name: Ensure private key is present
  community.crypto.openssl_privatekey:
    path: /etc/stunnel/redis-server.key
    size: 2048
    mode: "0600"
    type: RSA
    
- name: Ensure self-signed cert is present
  community.crypto.x509_certificate:
    path: /etc/stunnel/redis-server.crt
    privatekey_path: /etc/stunnel/redis-server.key
    provider: selfsigned
    selfsigned_not_after: "+3650d" # this is the default
    mode: "0644"
Run Code Online (Sandbox Code Playgroud)

如果您在私钥生成任务中没有设置密码,则默认为无密码。

正如@nondefinistic之前提到的,您可以通过设置到期日期selfsigned_not_after

mode参数设置密钥和证书文件的文件权限。尽可能设置权限是常见的最佳实践,并且默认情况下也会进行检查ansible-lint

资料来源: