ipacert
Description
The cert module makes it possible to request, revoke and retrieve SSL certificates for hosts, services and users.
Features
- Certificate request
- Certificate hold/release
- Certificate revocation
- Certificate retrieval
Supported FreeIPA Versions
FreeIPA versions 4.4.0 and up are supported by the ipacert module.
Requirements
Controller
- Ansible version: 2.13+
- Some tool to generate a certificate signing request (CSR) might be needed, like
openssl.
Node
- Supported FreeIPA version (see above)
Usage
Example inventory file
[ipaserver]
ipaserver.test.local
Example playbook to request a new certificate for a service:
---
- name: Certificate request
hosts: ipaserver
tasks:
- name: Request a certificate for a web server
ipacert:
ipaadmin_password: SomeADMINpassword
state: requested
csr: |
-----BEGIN CERTIFICATE REQUEST-----
MIGYMEwCAQAwGTEXMBUGA1UEAwwOZnJlZWlwYSBydWxlcyEwKjAFBgMrZXADIQBs
HlqIr4b/XNK+K8QLJKIzfvuNK0buBhLz3LAzY7QDEqAAMAUGAytlcANBAF4oSCbA
5aIPukCidnZJdr491G4LBE+URecYXsPknwYb+V+ONnf5ycZHyaFv+jkUBFGFeDgU
SYaXm/gF8cDYjQI=
-----END CERTIFICATE REQUEST-----
principal: HTTP/www.example.com
register: cert
Example playbook to revoke an existing certificate:
---
- name: Revoke certificate
hosts: ipaserver
tasks:
- name Revoke a certificate
ipacert:
ipaadmin_password: SomeADMINpassword
serial_number: 123456789
reason: 5
state: revoked
When revoking a certificate a mnemonic can also be used to set the revocation reason:
---
- name: Revoke certificate
hosts: ipaserver
tasks:
- name Revoke a certificate
ipacert:
ipaadmin_password: SomeADMINpassword
serial_number: 123456789
reason: cessationOfOperation
state: revoked
Example to hold a certificate (alias for revoking a certificate with reason certificateHold (6)):
---
- name: Hold a certificate
hosts: ipaserver
tasks:
- name: Hold certificate
ipacert:
ipaadmin_password: SomeADMINpassword
serial_number: 0xAB1234
state: held
Example playbook to release hold of certificate (may be used with any revoked certificates, despite of the rovoke reason):
---
- name: Release hold
hosts: ipaserver
tasks:
- name: Take a revoked certificate off hold
ipacert:
ipaadmin_password: SomeADMINpassword
serial_number: 0xAB1234
state: released
Example playbook to retrieve a certificate and save it to a file in the target node:
---
- name: Retriev certificate
hosts: ipaserver
tasks:
- name: Retrieve a certificate and save it to file 'cert.pem'
ipacert:
ipaadmin_password: SomeADMINpassword
certificate_out: cert.pem
state: retrieved
ipacert
| Variable | Description | Required |
|---|---|---|
ipaadmin_principal |
The admin principal is a string and defaults to admin |
no |
ipaadmin_password |
The admin password is a string and is required if there is no admin ticket available on the node | no |
ipaapi_context |
The context in which the module will execute. Executing in a server context is preferred. If not provided context will be determined by the execution environment. Valid values are server and client. |
no |
ipaapi_ldap_cache |
Use LDAP cache for IPA connection. The bool setting defaults to yes. (bool) | no |
csr |
X509 certificate signing request, in PEM format. | yes, if state: requested |
principal |
Host/service/user principal for the certificate. | yes, if state: requested |
add | add_principal |
Automatically add the principal if it doesn’t exist (service principals only). (bool) | no |
profile_id | profile |
Certificate Profile to use | no |
ca |
Name of the issuing certificate authority. | no |
chain |
Include certificate chain in output. (bool) | no |
serial_number |
Certificate serial number. (int) | yes, if state is retrieved, held, released or revoked. |
revocation_reason | reason |
Reason for revoking the certificate. Use one of the reason strings, or the corresponding value: “unspecified” (0), “keyCompromise” (1), “cACompromise” (2), “affiliationChanged” (3), “superseded” (4), “cessationOfOperation” (5), “certificateHold” (6), “removeFromCRL” (8), “privilegeWithdrawn” (9), “aACompromise” (10) | yes, if state: revoked |
certificate_out |
Write certificate (chain if chain is set) to this file, on the target node. |
no |
state |
The state to ensure. It can be one of requested, held, released, revoked, or retrieved. held is the same as revoke with reason “certificateHold” (6). released is the same as cert-revoke-hold on IPA CLI, releasing the hold status of a certificate. |
yes |
Return Values
Values are returned only if state is requested or retrieved and if certificate_out is not defined.
| Variable | Description | Returned When |
|---|---|---|
certificate |
Certificate fields and data. (dict) Options: |
if state is requested or retrieved and if certificate_out is not defined |
certificate - Issued X509 certificate in PEM encoding. Will include certificate chain if chain: true. (list) |
always | |
san_dnsname - X509 Subject Alternative Name. |
When DNSNames are present in the Subject Alternative Name extension of the issued certificate. | |
issuer - X509 distinguished name of issuer. |
always | |
subject - X509 distinguished name of certificate subject. |
always | |
serial_number - Serial number of the issued certificate. (int) |
always | |
revoked - Revoked status of the certificate. (bool) |
if certificate was revoked | |
owner_user - The username that owns the certificate. |
if state: retrieved and certificate is owned by a user |
|
owner_host - The host that owns the certificate. |
if state: retrieved and certificate is owned by a host |
|
owner_service - The service that owns the certificate. |
if state: retrieved and certificate is owned by a service |
|
valid_not_before - Time when issued certificate becomes valid, in GeneralizedTime format (YYYYMMDDHHMMSSZ) |
always | |
valid_not_after - Time when issued certificate ceases to be valid, in GeneralizedTime format (YYYYMMDDHHMMSSZ) |
always |
Authors
Sam Morris Rafael Jeffman
