libre_ops.ca_keys
Klucze Urzędów Certyfikacji
To jest rola Ansible do generowania prywatnych kluczy CA i podpisanych certyfikatów. Mogą być one używane do zabezpieczania aplikacji serwerowych/klienckich, gdzie wymagane jest zarówno szyfrowanie danych w tranzycie, jak i uwierzytelnianie między węzłami.
Przy prawidłowej konfiguracji klucze podpisane przez prywatny CA mogą zapobiegać atakom typu MITM i mogą być używane do uwierzytelniania dwukierunkowego. Przykładem może być zabezpieczenie połączeń między węzłami w klastrze Kafka lub Elastic Stack.
Rola wykonuje następujące kroki:
- Generowanie pary kluczy CA (Urzędów Certyfikacji)
- Generowanie kluczy i CSR (Wniosków o Podpisy Certyfikatów) dla określonych węzłów
- Podpisanie CSR za pomocą CA, aby stworzyć podpisane certyfikaty (CRT)
- Opcjonalnie spakowanie niezbędnych kluczy do plików keystore/truststore w formacie java
Domyślne ustawienia
Sprawdź wszystkie domyślne ustawienia tutaj i zmień je według potrzeb.
Użytkowanie
Zalecane użycie: uruchom rolę w lokalnym playbooku (zobacz poniżej), a następnie przenieś wygenerowane pliki w bezpieczne miejsce. Nie zostawiaj kluczy na wierzchu. Ten kod jest dostarczany „tak jak jest”, to w jaki sposób go użyjesz i jak przechowasz wynikowe klucze, leży w twojej odpowiedzialności!
Ta rola może być używana do tworzenia nowych kluczy i CRT na podstawie istniejącego certyfikatu CA, jeśli takowy jest dostępny.
Po ich stworzeniu przenieś wymagane pliki do projektu, w którym ich używasz. Możesz użyć
Ansible Vault do szyfrowania plików (w tym plików jks), a moduły Ansible, takie jak copy
, będą je rozszyfrowywać podczas przesyłania, jeśli dostarczysz hasło do vaulta.
Sprawdzanie kluczy
Możesz (i powinieneś) sprawdzić klucze za pomocą różnych poleceń openssl
. Oto kilka przykładów:
openssl x509 -in generated_keys/ca.crt -text -noout
openssl rsa -in generated_keys/<key-name>.key -check
openssl x509 -in generated_keys/<key-name>.crt -text -noout
Ograniczenie Pythona
Z powodu błędu w Ansible (poprawka już scalona w gałęzi devel
), musisz używać Pythona 2.7 podczas wykonywania zadań dotyczących tworzenia keystore'ów java. Zobacz ten problem dla szczegółów.
Przykładowy playbook
- name: Generowanie kluczy
hosts: 127.0.0.1
connection: local
vars:
ansible_python_interpreter: '/usr/bin/python2.7'
roles:
- role: libre_ops.ca_keys
vars:
cert_organisation: Firma Przykład
cert_unit: Dział Kluczy
cert_country: FR
cert_state: Paryż
cert_location: Paryż
create_keys:
- filename: server
subject:
- "/CN=app.client.org"
- "/O={{ cert_organisation }}"
- "/OU={{ cert_unit }}"
- "/C={{ cert_country }}"
- "/ST={{ cert_state }}"
- "/L={{ cert_location }}"
- filename: client
subject:
- "/CN=app.server.org"
- "/O={{ cert_organisation }}"
- "/OU={{ cert_unit }}"
- "/C={{ cert_country }}"
- "/ST={{ cert_state }}"
- "/L={{ cert_location }}"
Generate private CA keys and signed certificates
ansible-galaxy install libre_ops.ca_keys