Certificado OpenSSL
Resumo
- Este módulo permite (re) gerar certificados OpenSSL. Ele implementa uma noção de provedor (ie. selfsigned, ownca, acme, assertonly) Para o seu certificado.
- O provedor 'assertonly' destina-se a casos de uso em que alguém está interessado apenas em verificar as propriedades de um certificado fornecido.
- O provedor 'ownca' se destina a gerar um certificado OpenSSL assinado com seu próprio certificado CA (Autoridade de Certificação) (certificado autoassinado). Muitas propriedades que podem ser especificadas neste módulo são para validação de um certificado existente ou gerado recentemente. O local adequado para especificá-los, se você deseja receber um certificado com essas propriedades, é um CSR (Solicitação de Assinatura de Certificado).
Parâmetros
Parâmetro | Tipo | Escolhas | Valor Padrão | Comentários |
|---|---|---|---|
acme_accountkey_path | path | | Caminho para a chave da conta do acme provedor Isso só é usado pelo acme provedor. |
acme_chain | boolean | Escolhas: - true(default) - false | Incluir o certificado intermediário para o certificado gerado Isso só é usado pelo acme provedor. |
acme_challenge_path | path | | Caminho para o diretório de desafio ACME que é servido em http: // <HOST>: 80 / .well-known / acme-challenge / Isso só é usado pelo acme provedor. |
attributes aliases: attr | string | | Atributos que o arquivo ou diretório deve ter. Para obter os sinalizadores suportados, consulte a página do manual do chattr no sistema de destino. Essa string deve conter os atributos na mesma ordem que aquela exibida por lsattr. operador = é assumido como padrão, caso contrário, + ou - os operadores precisam ser incluídos na string. |
csr_path | path | | Caminho para a solicitação de assinatura de certificado (CSR) usada para gerar este certificado. Isso não é necessário no assertonly modo. |
extended_key_usage aliases: extendedKeyUsage | list / elements=str | | O campo de extensão extended_key_usage deve conter todos esses valores. Isso só é usado pelo assertonly provedor. |
extended_key_usage_strict aliases: extendedKeyUsage_strict | boolean | Escolhas: - true - false(default) | Se definido como True, o campo de extensão extended_key_usage deve conter apenas esses valores. Isso só é usado pelo assertonly provedor. |
force | boolean | Escolhas: - true - false(default) | Gere o certificado, mesmo que já exista. |
group | string | | Nome do grupo que deve possuir o arquivo / diretório, como seria alimentado para chown . |
has_expired | boolean | Escolhas: - true - false(default) | Verifica se o certificado expirou / não expirou no momento em que o módulo é executado. Isso só é usado pelo assertonly provedor. |
invalid_at | string | | O certificado deve ser inválido neste momento.\ O carimbo de data / hora é formatado como ASN.1 TIME.\ Isso só é usado pelo assertonly provedor. |
issuer | dict | | Pares de Key/value que devem estar presentes no campo de nome do emissor do certificado. Se você precisar especificar mais de um valor com a mesma chave, use uma lista como valor. Isso só é usado pelo assertonly provedor. |
issuer_strict | boolean | Escolhas: - true - false(default) | Se definido como True, o campo do emissor deve conter apenas esses valores. Isso só é usado pelo assertonly provedor. |
key_usage aliases: keyUsage | list / elements=str | | O campo de extensão key_usage deve conter todos esses valores. Isso só é usado pelo assertonly provedor. |
key_usage_strict aliases: keyUsage_strict | boolean | Escolhas: - true - false(default) | Se definido como True, o campo de extensão key_usage deve conter apenas esses valores. Isso só é usado pelo assertonly provedor. |
mode | string | | Modo em que o arquivo ou diretório deve ser. Para aqueles acostumados com / usr / bin / chmod, lembre-se de que os modos são, na verdade, números octais. Você deve adicionar um zero à esquerda para que o analisador YAML do Atmosphere saiba que é um número octal (como 0644ou 01777) ou citá-lo (como '644'ou '1777') para que Atmosphere receba uma string e possa fazer sua própria conversão de string em número. Fornecer um número a Atmosphere sem seguir uma dessas regras resultará em um número decimal que terá resultados inesperados. |
not_after aliases: notAfter | string | | O certificado deve expirar neste momento. O carimbo de data / hora é formatado como ASN.1 TIME. Isso só é usado pelo assertonly provedor. |
not_before aliases: notBefore | string | | O certificado deve começar a se tornar válido neste momento. O carimbo de data / hora é formatado como ASN.1 TIME. Isso só é usado pelo assertonly provedor. |
ownca_digest | string | Default: - "sha256" | Algoritmo de resumo a ser usado para o ownca certificado. Isso só é usado pelo ownca provedor. |
ownca_not_after | string | | O carimbo de data / hora em que o certificado deixa de ser válido. O carimbo de data / hora é formatado como ASN.1 TIME. Se este valor não for especificado, o certificado deixará de ser válido daqui a 10 anos. Isso só é usado pelo ownca provedor. |
ownca_not_before | string | | O carimbo de data / hora em que o certificado começa a ser válido. O carimbo de data / hora é formatado como ASN.1 TIME. Se este valor não for especificado, o certificado passará a ser válido a partir de agora. Isso só é usado pelo ownca provedor. |
ownca_path | path | | Caminho remoto absoluto do certificado CA (Autoridade de Certificação). Isso só é usado pelo ownca provedor. |
ownca_privatekey_passphrase | string | | A senha longa para ownca_privatekey_path. Isso só é usado pelo ownca provedor. |
ownca_privatekey_path | path | | Caminho para a chave privada CA (Autoridade de Certificação) a ser usada ao assinar o certificado.\ Isso só é usado pelo ownca provedor. |
ownca_version | integer | Default: - 3 | Versão do ownca certificado. Hoje em dia, quase sempre deveria ser 3. Isso só é usado pelo ownca provedor. |
owner | string | | Nome do usuário que deve possuir o arquivo / diretório, como seria alimentado para chown . |
path - required | path | | Caminho absoluto remoto onde o arquivo de certificado gerado deve ser criado ou já está localizado. |
privatekey_passphrase | string | | A senha longa para privatekey_path. Isso é necessário se a chave privada for protegida por senha. |
privatekey_path | path | | Caminho para a chave privada a ser usada ao assinar o certificado. |
provider - required | string | Escolhas: - selfsigned - ownca - assertonly - acme | Nome do provedor a ser usado para gerar / recuperar o certificado OpenSSL. O assertonly provedor não gerará arquivos e falhará se o arquivo de certificado estiver ausente. |
selevel | string | Default: - "s0" | Parte do nível do contexto do arquivo SELinux. Este é o atributo MLS / MCS, também conhecido como range. _defaultrecurso funciona como seuer . |
selfsigned_digest | string | Default: "sha256" | Algoritmo de resumo a ser usado ao autoassinar o certificadoIsso só é usado pelo selfsignedprovedor. |
selfsigned_not_after aliases: selfsigned_notAfter | string | | O carimbo de data / hora em que o certificado deixa de ser válido. O carimbo de data / hora é formatado como ASN.1 TIME. Se este valor não for especificado, o certificado deixará de ser válido daqui a 10 anos. Isso só é usado pelo selfsigned provedor. |
selfsigned_not_before aliases: selfsigned_notBefore | string | | O carimbo de data / hora em que o certificado começa a ser válido. O carimbo de data / hora é formatado como ASN.1 TIME. Se este valor não for especificado, o certificado passará a ser válido a partir de agora. Isso só é usado pelo selfsigned provedor. |
selfsigned_version | integer | Default: - 3 | Versão do selfsigned certificado. Hoje em dia, quase sempre deveria ser 3. Isso só é usado pelo selfsigned provedor. |
serole | string | | Função parte do contexto do arquivo SELinux, _default recurso funciona para seuser . |
setype | string | | Digite parte do contexto do arquivo SELinux, o _default recurso funciona como para seuser . |
seuser | string | | Parte do usuário do contexto do arquivo SELinux. Terá como padrão a política do sistema, se aplicável. Se definido como _default, usará a userparte da política, se disponível. |
signature_algorithms | list / elements=str | | lista de algoritmos com os quais você aceitaria o certificado a ser assinado (por exemplo, ['sha256WithRSAEncryption', 'sha512WithRSAEncryption']). Isso só é usado pelo assertonly provedor. |
state | string | Escolhas: - present(default) - absent | Se o certificado deve existir ou não, agir se o estado for diferente do que é declarado. |
subject | dict | | Pares de chave / valor que devem estar presentes no campo de nome do assunto do certificado. Se você precisar especificar mais de um valor com a mesma chave, use uma lista como valor. Isso só é usado pelo assertonly provedor. |
subject_alt_name aliases: subjectAltName | string | | O campo de extensão subject_alt_name deve conter esses valores. Isso só é usado pelo assertonly provedor. |
subject_alt_name_strict aliases: subjectAltName_strict | boolean | Escolhas: - true - false(default) | Se definido como True, o campo de extensão subject_alt_name deve conter apenas esses valores. Isso só é usado pelo assertonly provedor. |
subject_strict | boolean | Escolhas: - true - false(default) | Se definido como True, o campo de assunto deve conter apenas esses valores. Isso só é usado pelo assertonly provedor. |
unsafe_writes | boolean | Escolhas: - true - false(default) | Por padrão, este módulo usa operações atômicas para evitar corrupção de dados ou leituras inconsistentes dos arquivos de destino, mas às vezes os sistemas são configurados ou apenas interrompidos de maneiras que evitam isso. Um exemplo são os arquivos montados no docker, que não podem ser atualizados atomicamente de dentro do contêiner e só podem ser gravados de maneira insegura. Esta opção permite que o Atmosphere recorra a métodos não seguros de atualização de arquivos quando as operações atômicas falham (no entanto, não força o Atmosphere a realizar gravações inseguras). IMPORTANTE! As gravações inseguras estão sujeitas a condições de corrida e podem levar à corrupção de dados. |
valid_at | string | | O certificado deve ser válido neste momento. O carimbo de data / hora é formatado como ASN.1 TIME. Isso só é usado pelo assertonly provedor. |
valid_in | string | | O certificado ainda deve ser válido em valid_in segundos a partir de agora.Isso só é usado pelo assertonly provedor. |
version | integer | | A versão do certificado.Hoje em dia, quase sempre deveria ser 3. Isso só é usado pelo assertonly provedor. |
Notas
- Todos os valores de ASN.1 TIME devem ser especificados seguindo o padrão YYYYMMDDHHMMSSZ. A data especificada deve ser UTC. Minutos e segundos são obrigatórios.
- Por motivos de segurança, ao usar o ownca provedor. Você NÃO deve executar o openssl_certificate em uma máquina de destino, mas em uma máquina CA dedicada. Recomenda-se não armazenar a chave privada da CA na máquina de destino. Depois de assinado, o certificado pode ser movido para a máquina de destino.
- Deve ser executado de forma remota no host
Exemplos
# Gerar um certificado OpenSSL autoassinado
openssl_certificate:
path: /etc/ssl/crt/atmosphere.com.crt
privatekey_path: /etc/ssl/private/atmosphere.com.pem
csr_path: /etc/ssl/csr/atmosphere.com.csr
provider: selfsigned
# Gere um certificado OpenSSL assinado com seu próprio certificado CA
openssl_certificate:
path: /etc/ssl/crt/atmosphere.com.crt
csr_path: /etc/ssl/csr/atmosphere.com.csr
ownca_path: /etc/ssl/crt/atmosphere.crt
ownca_privatekey_path: /etc/ssl/private/atmosphere_CA.pem
provider: ownca
# Gerar um certificado Let's Encrypt
openssl_certificate:
path: /etc/ssl/crt/atmosphere.com.crt
csr_path: /etc/ssl/csr/atmosphere.com.csr
provider: acme
acme_accountkey_path: /etc/ssl/private/atmosphere.com.pem
acme_challenge_path: /etc/ssl/challenges/atmosphere.com/
# Forçar (re) gerar um novo certificado Let's Encrypt
openssl_certificate:
path: /etc/ssl/crt/atmosphere.com.crt
csr_path: /etc/ssl/csr/atmosphere.com.csr
provider: acme
acme_accountkey_path: /etc/ssl/private/atmosphere.com.pem
acme_challenge_path: /etc/ssl/challenges/atmosphere.com/
force: yes
# Gerar um certificado Entrust por meio da API Entrust Certificate Services (ECS)
openssl_certificate:
path: /etc/ssl/crt/atmosphere.com.crt
csr_path: /etc/ssl/csr/atmosphere.com.csr
provider: entrust
entrust_requester_name: Jo Doe
entrust_requester_email: [email protected]
entrust_requester_phone: 555-555-5555
entrust_cert_type: STANDARD_SSL
entrust_api_user: apiusername
entrust_api_key: a^lv*32!cd9LnT
entrust_api_client_cert_path: /etc/ssl/entrust/ecs-client.crt
entrust_api_client_cert_key_path: /etc/ssl/entrust/ecs-key.crt
entrust_api_specification_path: /etc/ssl/entrust/api-docs/cms-api-2.1.0.yaml
# O exemplo a seguir mostra um uso assertonly usando todas as opções existentes para
# assertonly e mostra como emular o comportamento com os módulos
# openssl_certificate_info, openssl_csr_info, openssl_privatekey_info e assert:
- openssl_certificate:
provider: assertonly
path: /etc/ssl/crt/atmosphere.com.crt
csr_path: /etc/ssl/csr/atmosphere.com.csr
privatekey_path: /etc/ssl/csr/atmosphere.com.key
signature_algorithms:
- sha256WithRSAEncryption
- sha512WithRSAEncryption
subject:
commonName: atmosphere.com
subject_strict: yes
issuer:
commonName: atmosphere.com
issuer_strict: yes
has_expired: no
version: 3
key_usage:
- Data Encipherment
key_usage_strict: yes
extended_key_usage:
- DVCS
extended_key_usage_strict: yes
subject_alt_name:
- dns:atmosphere.com
subject_alt_name_strict: yes
not_before: 20190331202428Z
not_after: 20190413202428Z
valid_at: "+1d10h"
invalid_at: 20200331202428Z
valid_in: 10 # in ten seconds
- openssl_certificate_info:
path: /etc/ssl/crt/atmosphere.com.crt
# para valid_at, invalid_at e valid_in
valid_at:
one_day_ten_hours: "+1d10h"
fixed_timestamp: 20200331202428Z
ten_seconds: "+10"
register: result
- openssl_csr_info:
# Verifica se a assinatura CSR é válida; o módulo irá falhar se não
path: /etc/ssl/csr/atmosphere.com.csr
register: result_csr
- openssl_privatekey_info:
path: /etc/ssl/csr/atmosphere.com.key
register: result_privatekey
- assert:
that:
# Quando a chave privada é especificada para assertonly, isso será verificado:
- result.public_key == result_privatekey.public_key
# Quando CSR é especificado para assertonly, isso será verificado:
- result.public_key == result_csr.public_key
- result.subject_ordered == result_csr.subject_ordered
- result.extensions_by_oid == result_csr.extensions_by_oid
# verificação de assinatura_algoritmos
- "result.signature_algorithm == 'sha256WithRSAEncryption' or result.signature_algorithm == 'sha512WithRSAEncryption'"
# assunto e subject_strict
- "result.subject.commonName == 'atmosphere.com'"
- "result.subject | length == 1" # o número deve ser o número de entradas que você verifica
# issuer e issuer_strict
- "result.issuer.commonName == 'atmosphere.com'"
- "result.issuer | length == 1" # o número deve ser o número de entradas que você verifica
# has_expired
- not result.expired
# versão
- result.version == 3
# key_usage e key_usage_strict
- "'Data Encipherment' in result.key_usage"
- "result.key_usage | length == 1" # o número deve ser o número de entradas que você verifica
# extended_key_usage e extended_key_usage_strict
- "'DVCS' in result.extended_key_usage"
- "result.extended_key_usage | length == 1" # o número deve ser o número de entradas que você verifica
# subject_alt_name e subject_alt_name_strict
- "'dns:atmosphere.com' in result.subject_alt_name"
- "result.subject_alt_name | length == 1" # o número deve ser o número de entradas que você verifica
# not_before e not_after
- "result.not_before == '20190331202428Z'"
- "result.not_after == '20190413202428Z'"
# valid_at, invalid_at e valid_in
- "result.valid_at.one_day_ten_hours" # para valid_at
- "not result.valid_at.fixed_timestamp" # para invalid_at
- "result.valid_at.ten_seconds" # para valid_in
# Exemplos para algumas verificações que podem ser usadas para o provedor assertonly:
# (observe que assertonly foi descontinuado!)
# Como usar o provedor assertonly para implementar e acionar seu próprio fluxo de
# trabalho de geração de certificado personalizado: Verifique se um certificado ainda é válido, ignorando as falhas
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
has_expired: no
ignore_errors: yes
register: validity_check
# Execute tarefas personalizadas para obter um certificado novo e válido no caso de falha na verificação inicial
command: superspecialSSL recreate /etc/ssl/crt/example.com.crt
when: validity_check.failed
# Verifique a validade do novo certificado novamente com os mesmos parâmetros, desta vez falhando no jogo se ainda for inválido
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
has_expired: no
when: validity_check.failed
# Algumas outras verificações que assertonly podem ser usadas para:
# Verificar se um certificado existente foi emitido pelo Let's Encrypt CA e ainda é válido
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
issuer:
O: Let's Encrypt
has_expired: no
# Certifique-se de que um certificado usa um algoritmo de assinatura moderno (sem SHA1, MD5 ou DSA)
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
signature_algorithms:
- sha224WithRSAEncryption
- sha256WithRSAEncryption
- sha384WithRSAEncryption
- sha512WithRSAEncryption
- sha224WithECDSAEncryption
- sha256WithECDSAEncryption
- sha384WithECDSAEncryption
- sha512WithECDSAEncryption
# Certifique-se de que o certificado existente pertence à chave privada especificada
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
privatekey_path: /etc/ssl/private/example.com.pem
provider: assertonly
# Certifique-se de que o certificado existente ainda é válido no solstício de inverno de 2017
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
valid_at: 20171221162800Z
# Certifique-se de que o certificado existente ainda é válido 2 semanas (1209600 segundos) a partir de agora
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
valid_in: 1209600
# Certifique-se de que o certificado existente é usado apenas para assinaturas digitais e criptografar outras chaves
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
key_usage:
- digitalSignature
- keyEncipherment
key_usage_strict: true
# Certifique-se de que o certificado existente pode ser usado para autenticação de cliente
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
extended_key_usage:
- clientAuth
# Certifique-se de que o certificado existente só pode ser usado para autenticação de cliente e carimbo de data / hora
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
extended_key_usage:
- clientAuth
- 1.3.6.1.5.5.7.3.8
extended_key_usage_strict: true
# Certifique-se de que o certificado existente tenha um determinado domínio em seu subjectAltName
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
subject_alt_name:
- www.example.com
- test.example.comValores Retornados
Chave | Tipo | Retornado quando | Descrição |
|---|---|---|---|
filename | string | changed ou sucesso | Caminho para o certificado gerado |