2015-10-12 29 views
11

Skonfigurowałem instalację i konfigurację nginx (wraz z ustawieniami certyfikatów SSL dla strony https) przez ansible. Certyfikaty SSL są pod hasłami.Hasło do hasła do Nginx z witryną https podczas restartu

Chcę napisać zadanie ansilbe, które ponownie uruchamia nginx. Problem jest następujący.

Normalnie, nginx z witryną https wewnątrz pyta o PEM pass phrase podczas restartu. Ansible nie pyta o to hasło podczas wykonywania playbooka.

Istnieje solution z zachowaniem odszyfrowanego certyfikatu i klucza w jakimś prywatnym katalogu. Ale tak naprawdę nie chcę zostawić mojego certyfikatu i klucza gdzieś niezaszyfrowanego.

Jak przekazać hasło do nginx (lub do openssl) podczas restartu poprzez ansible? Idealny scenariusz jest następujący:

  1. Pytaj o hasło SSL (przez vars_promt). Inną opcją jest użycie skarbu ansibli.
  2. Ansible restartuje nginx, a gdy nginx pyta o PEM pass phrase, ansibli przekazuje hasło do nginx.

Czy to możliwe?

Odpowiedz

3

Jeśli posiadasz wystarczająco restrykcyjne uprawnienia do klucza prywatnego (np. Pozwalając, aby nginx mógł go odczytać), prawdopodobnie byłby wystarczająco dobry. Nginx i tak będzie musiał go załadować do pamięci; to może być trudniejsze dla osoby atakującej do odzyskania, ale jeśli mają dostęp root do skrzynki, należy rozważyć klucz naruszony niezależnie.

Można również podać hasło do polecenia, które jest ponownie uruchamiane (na przykład echo mypass | service nginx restart). Spowoduje to wyświetlenie go w postaci zwykłego tekstu na listach procesów i nie powinno być uważane za bardziej bezpieczne.

Zalecam zablokowanie uprawnień do pliku i nieposiadanie hasła. Nie wierzę, że Ansible ma jakikolwiek sposób na określenie odpowiedzi na indywidualne podpowiedzi, inne niż sudo.

12

Nginx ma parametr ssl_password_file.

Określa plik o hasło podczas tajnych kluczy, gdzie każdy hasło jest określone w osobnej linii. Podczas ładowania klucza próbowane są kolejno hasła.

Przykład:

http { 
    ssl_password_file /etc/keys/global.pass; 
    ... 
    server { 
     server_name www1.example.com; 
     ssl_certificate_key /etc/keys/first.key; 
    } 
    server { 
     server_name www2.example.com; 
     # named pipe can also be used instead of a file 
     ssl_password_file /etc/keys/fifo; 
     ssl_certificate_key /etc/keys/second.key; 
    } 
} 

Co można zrobić, to zachować tę ssl_password_file w ansibl-sklepieniem, skopiuj go, a następnie ponownie uruchom nginx razie powodzenia go usunąć.

Nie mam doświadczenia z pierwszej ręki, jeśli to zadziała lub jakie mogą być inne skutki uboczne (na przykład instrukcja service nginx restart prawdopodobnie się nie powiedzie), ale wydaje mi się logicznym podejściem do mnie.

+2

Kopiowanie go na dysk może również zniszczyć cały punkt nie zapisywania go na serwerze ... – Basic

+0

Można też wygenerować certyfikat bez frazy karnej, dodając opcję '-nodes' do polecenia openssl podczas generowania certyfikatów – Alcalyn