- Configurar GnuPG con gnupg-pkcs11-scd y libsiguldry_pkcs11.so para el usuario root. - Importar clave pública de firma de Siguldry al llavero GPG de root automáticamente. - Modificar el spooler para usar rpmsign con la macro _gpg_name en lugar de Sequoia (_openpgp_sign). - Remover el argumento keyword no soportado 'sigkey' de add_rpm_sig(). - Definir variables de entorno SIGULDRY_SOCKET y CREDENTIALS_DIRECTORY en el servicio systemd del spooler. Co-developed-by: Gemini AI <renich+gemini@woralelandia.com> Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
313 lines
10 KiB
YAML
313 lines
10 KiB
YAML
---
|
|
- name: "Generate: Siguldry Certificates on Localhost"
|
|
delegate_to: localhost
|
|
run_once: true
|
|
block:
|
|
- name: "Generate Siguldry CA private key"
|
|
community.crypto.openssl_privatekey:
|
|
path: "{{ koji_pki_dir }}/siguldry_ca.key"
|
|
size: 4096
|
|
mode: "0600"
|
|
|
|
- name: "Generate Siguldry CA CSR"
|
|
community.crypto.openssl_csr:
|
|
path: "{{ koji_pki_dir }}/siguldry_ca.csr"
|
|
privatekey_path: "{{ koji_pki_dir }}/siguldry_ca.key"
|
|
common_name: "Siguldry Certificate Authority"
|
|
organization_name: "MxOS Siguldry"
|
|
basic_constraints:
|
|
- "CA:TRUE"
|
|
key_usage:
|
|
- keyCertSign
|
|
- cRLSign
|
|
|
|
- name: "Generate self-signed Siguldry CA certificate"
|
|
community.crypto.x509_certificate:
|
|
path: "{{ koji_pki_dir }}/siguldry_ca.crt"
|
|
csr_path: "{{ koji_pki_dir }}/siguldry_ca.csr"
|
|
privatekey_path: "{{ koji_pki_dir }}/siguldry_ca.key"
|
|
provider: selfsigned
|
|
selfsigned_not_after: "+3650d"
|
|
|
|
- name: "Generate private key for Siguldry Server"
|
|
community.crypto.openssl_privatekey:
|
|
path: "{{ koji_pki_dir }}/siguldry-server.key"
|
|
size: 4096
|
|
mode: "0600"
|
|
|
|
- name: "Generate CSR for Siguldry Server"
|
|
community.crypto.openssl_csr:
|
|
path: "{{ koji_pki_dir }}/siguldry-server.csr"
|
|
privatekey_path: "{{ koji_pki_dir }}/siguldry-server.key"
|
|
common_name: "{{ koji_hub_fqdn }}"
|
|
|
|
- name: Create openssl config for Siguldry Server
|
|
ansible.builtin.copy:
|
|
dest: "{{ koji_pki_dir }}/openssl-siguldry-server.cnf"
|
|
mode: "0644"
|
|
content: |
|
|
[v3_ca]
|
|
basicConstraints = CA:FALSE
|
|
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
|
|
extendedKeyUsage = serverAuth, clientAuth
|
|
subjectAltName = DNS:{{ koji_hub_fqdn }},DNS:server.example.com
|
|
|
|
- name: Sign Siguldry Server certificate
|
|
ansible.builtin.shell:
|
|
cmd: >
|
|
openssl x509 -req
|
|
-in {{ koji_pki_dir }}/siguldry-server.csr
|
|
-CA {{ koji_pki_dir }}/siguldry_ca.crt
|
|
-CAkey {{ koji_pki_dir }}/siguldry_ca.key
|
|
-CAcreateserial
|
|
-out {{ koji_pki_dir }}/siguldry-server.crt
|
|
-days 3650
|
|
-sha256
|
|
-extfile {{ koji_pki_dir }}/openssl-siguldry-server.cnf
|
|
-extensions v3_ca
|
|
creates: "{{ koji_pki_dir }}/siguldry-server.crt"
|
|
|
|
- name: "Generate private key for Siguldry Bridge"
|
|
community.crypto.openssl_privatekey:
|
|
path: "{{ koji_pki_dir }}/siguldry-bridge.key"
|
|
size: 4096
|
|
mode: "0600"
|
|
|
|
- name: "Generate CSR for Siguldry Bridge"
|
|
community.crypto.openssl_csr:
|
|
path: "{{ koji_pki_dir }}/siguldry-bridge.csr"
|
|
privatekey_path: "{{ koji_pki_dir }}/siguldry-bridge.key"
|
|
common_name: "{{ koji_hub_fqdn }}"
|
|
|
|
- name: Create openssl config for Siguldry Bridge
|
|
ansible.builtin.copy:
|
|
dest: "{{ koji_pki_dir }}/openssl-siguldry-bridge.cnf"
|
|
mode: "0644"
|
|
content: |
|
|
[v3_ca]
|
|
basicConstraints = CA:FALSE
|
|
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
|
|
extendedKeyUsage = serverAuth
|
|
subjectAltName = DNS:{{ koji_hub_fqdn }},DNS:bridge.example.com
|
|
|
|
- name: Sign Siguldry Bridge certificate
|
|
ansible.builtin.shell:
|
|
cmd: >
|
|
openssl x509 -req
|
|
-in {{ koji_pki_dir }}/siguldry-bridge.csr
|
|
-CA {{ koji_pki_dir }}/siguldry_ca.crt
|
|
-CAkey {{ koji_pki_dir }}/siguldry_ca.key
|
|
-CAcreateserial
|
|
-out {{ koji_pki_dir }}/siguldry-bridge.crt
|
|
-days 3650
|
|
-sha256
|
|
-extfile {{ koji_pki_dir }}/openssl-siguldry-bridge.cnf
|
|
-extensions v3_ca
|
|
creates: "{{ koji_pki_dir }}/siguldry-bridge.crt"
|
|
|
|
- name: "Generate private key for Siguldry Client"
|
|
community.crypto.openssl_privatekey:
|
|
path: "{{ koji_pki_dir }}/siguldry-client.key"
|
|
size: 4096
|
|
mode: "0600"
|
|
|
|
- name: "Generate CSR for Siguldry Client"
|
|
community.crypto.openssl_csr:
|
|
path: "{{ koji_pki_dir }}/siguldry-client.csr"
|
|
privatekey_path: "{{ koji_pki_dir }}/siguldry-client.key"
|
|
common_name: "kojiadmin"
|
|
|
|
- name: Create openssl config for Siguldry Client
|
|
ansible.builtin.copy:
|
|
dest: "{{ koji_pki_dir }}/openssl-siguldry-client.cnf"
|
|
mode: "0644"
|
|
content: |
|
|
[v3_ca]
|
|
basicConstraints = CA:FALSE
|
|
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
|
|
extendedKeyUsage = clientAuth
|
|
subjectAltName = DNS:kojiadmin
|
|
|
|
- name: Sign Siguldry Client certificate
|
|
ansible.builtin.shell:
|
|
cmd: >
|
|
openssl x509 -req
|
|
-in {{ koji_pki_dir }}/siguldry-client.csr
|
|
-CA {{ koji_pki_dir }}/siguldry_ca.crt
|
|
-CAkey {{ koji_pki_dir }}/siguldry_ca.key
|
|
-CAcreateserial
|
|
-out {{ koji_pki_dir }}/siguldry-client.crt
|
|
-days 3650
|
|
-sha256
|
|
-extfile {{ koji_pki_dir }}/openssl-siguldry-client.cnf
|
|
-extensions v3_ca
|
|
creates: "{{ koji_pki_dir }}/siguldry-client.crt"
|
|
|
|
- name: Clean up temporary openssl configs
|
|
ansible.builtin.file:
|
|
path: "{{ item }}"
|
|
state: absent
|
|
loop:
|
|
- "{{ koji_pki_dir }}/openssl-siguldry-server.cnf"
|
|
- "{{ koji_pki_dir }}/openssl-siguldry-bridge.cnf"
|
|
- "{{ koji_pki_dir }}/openssl-siguldry-client.cnf"
|
|
|
|
- name: Install Siguldry package
|
|
ansible.builtin.dnf:
|
|
name:
|
|
- siguldry
|
|
- siguldry-pkcs11
|
|
- gnupg-pkcs11-scd
|
|
state: present
|
|
|
|
- name: Ensure Siguldry config directory exists
|
|
ansible.builtin.file:
|
|
path: /etc/siguldry
|
|
state: directory
|
|
owner: root
|
|
group: siguldry
|
|
mode: "0750"
|
|
|
|
- name: Deploy Siguldry configuration files
|
|
ansible.builtin.template:
|
|
src: "{{ item.src }}"
|
|
dest: "/etc/siguldry/{{ item.dest }}"
|
|
owner: root
|
|
group: siguldry
|
|
mode: "0640"
|
|
loop:
|
|
- { src: "server.toml.j2", dest: "server.toml" }
|
|
- { src: "bridge.toml.j2", dest: "bridge.toml" }
|
|
- { src: "client.toml.j2", dest: "client.toml" }
|
|
|
|
- name: Ensure systemd credstore directory exists
|
|
ansible.builtin.file:
|
|
path: /etc/credstore
|
|
state: directory
|
|
owner: root
|
|
group: root
|
|
mode: "0700"
|
|
|
|
- name: Deploy Siguldry TLS credentials to systemd credstore
|
|
ansible.builtin.copy:
|
|
src: "{{ koji_pki_dir }}/{{ item.src }}"
|
|
dest: "/etc/credstore/{{ item.dest }}"
|
|
owner: root
|
|
group: root
|
|
mode: "0600"
|
|
loop:
|
|
- { src: "siguldry_ca.crt", dest: "siguldry.ca_certificate.pem" }
|
|
- { src: "siguldry-server.crt", dest: "siguldry.server.certificate.pem" }
|
|
- { src: "siguldry-server.key", dest: "siguldry.server.private_key.pem" }
|
|
- { src: "siguldry-bridge.crt", dest: "siguldry.bridge.certificate.pem" }
|
|
- { src: "siguldry-bridge.key", dest: "siguldry.bridge.private_key.pem" }
|
|
- { src: "siguldry-client.crt", dest: "siguldry.client.certificate.pem" }
|
|
- { src: "siguldry-client.key", dest: "siguldry.client.private_key.pem" }
|
|
|
|
- name: Deploy Siguldry signing key passphrase to systemd credstore
|
|
ansible.builtin.copy:
|
|
content: "{{ gpg_key_passphrase }}"
|
|
dest: /etc/credstore/siguldry.signing_key.passphrase
|
|
owner: root
|
|
group: root
|
|
mode: "0600"
|
|
|
|
- name: Start and enable Siguldry services
|
|
ansible.builtin.systemd:
|
|
name: "{{ item }}"
|
|
state: started
|
|
enabled: true
|
|
daemon_reload: true
|
|
loop:
|
|
- siguldry-bridge.service
|
|
- siguldry-server.service
|
|
- siguldry-client-proxy.socket
|
|
- siguldry-signer.socket
|
|
|
|
- name: Run Siguldry database migrations
|
|
become: true
|
|
become_user: siguldry
|
|
ansible.builtin.command:
|
|
cmd: siguldry-server -c /etc/siguldry/server.toml manage migrate
|
|
register: siguldry_migration_result
|
|
changed_when: "'No migrations to apply' not in siguldry_migration_result.stdout"
|
|
|
|
- name: Check if remote user kojiadmin exists in Siguldry
|
|
become: true
|
|
become_user: siguldry
|
|
ansible.builtin.shell:
|
|
cmd: siguldry-server -c /etc/siguldry/server.toml manage users list
|
|
register: siguldry_users_list
|
|
changed_when: false
|
|
|
|
- name: Add remote user kojiadmin to Siguldry database
|
|
become: true
|
|
become_user: siguldry
|
|
ansible.builtin.command:
|
|
cmd: siguldry-server -c /etc/siguldry/server.toml manage users create kojiadmin
|
|
when: "'kojiadmin' not in siguldry_users_list.stdout"
|
|
|
|
- name: Check if mxos-signing-key exists in Siguldry
|
|
become: true
|
|
become_user: siguldry
|
|
ansible.builtin.shell:
|
|
cmd: siguldry-server -c /etc/siguldry/server.toml manage key list
|
|
register: siguldry_keys_list
|
|
changed_when: false
|
|
|
|
- name: Create mxos-signing-key in Siguldry
|
|
become: true
|
|
become_user: siguldry
|
|
ansible.builtin.shell:
|
|
cmd: >
|
|
siguldry-server -c /etc/siguldry/server.toml manage key create
|
|
kojiadmin mxos-signing-key
|
|
--password-file <(echo "{{ gpg_key_passphrase }}")
|
|
when: "'mxos-signing-key' not in siguldry_keys_list.stdout"
|
|
|
|
- name: Ensure GnuPG directory exists for root user
|
|
ansible.builtin.file:
|
|
path: /root/.gnupg
|
|
state: directory
|
|
owner: root
|
|
group: root
|
|
mode: "0700"
|
|
|
|
- name: Deploy GnuPG gpg-agent.conf for root user
|
|
ansible.builtin.copy:
|
|
dest: /root/.gnupg/gpg-agent.conf
|
|
owner: root
|
|
group: root
|
|
mode: "0600"
|
|
content: |
|
|
scdaemon-program /usr/bin/gnupg-pkcs11-scd
|
|
|
|
- name: Deploy GnuPG gnupg-pkcs11-scd.conf for root user
|
|
ansible.builtin.copy:
|
|
dest: /root/.gnupg/gnupg-pkcs11-scd.conf
|
|
owner: root
|
|
group: root
|
|
mode: "0600"
|
|
content: |
|
|
providers siguldry
|
|
provider-siguldry-library /usr/lib64/pkcs11/libsiguldry_pkcs11.so
|
|
|
|
- name: Kill running gpg-agent to apply PKCS#11 configuration
|
|
ansible.builtin.command: gpgconf --kill gpg-agent
|
|
failed_when: false
|
|
changed_when: false
|
|
|
|
- name: Check if Siguldry signing key is imported in root keyring
|
|
ansible.builtin.command: gpg --list-keys koji@cs10-koji-00.mx-os
|
|
register: siguldry_gpg_key_check
|
|
failed_when: false
|
|
changed_when: false
|
|
|
|
- name: Import Siguldry signing key into root keyring
|
|
ansible.builtin.shell:
|
|
cmd: >
|
|
SIGULDRY_SOCKET=/run/siguldry-client-proxy/siguldry-client-proxy.socket
|
|
CREDENTIALS_DIRECTORY=/etc/credstore
|
|
siguldry-client --credentials-directory /etc/credstore -c /etc/siguldry/client.toml key get mxos-signing-key --certificates
|
|
| gpg --import
|
|
when: siguldry_gpg_key_check.rc != 0
|