Utwórz certyfikat SSL nieinteraktywnie [zamknięty]

28

Chcę cicho, nie interaktywnie, utworzyć certyfikat SSL. To znaczy, bez monitowania o jakiekolwiek dane.

Normalnym sposobem, w jaki tworzę certyfikat, jest:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 \
    -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem 

Próbowałem następujące:

openssl genrsa -out server.key 2048
touch openssl.cnf

cat >> openssl.cnf <<EOF
[ req ]
prompt = no
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
C = GB
ST = Test State
L = Test Locality
O = Org Name
OU = Org Unit Name
CN = Common Name
emailAddress = test@email.com
EOF

openssl req -x509 -config openssl.cnf -nodes -days 7300 \
    -signkey server.key -out /etc/ssl/private/pure-ftpd.pem 

Ale nadal pojawia się monit o dane.

TheNiceGuy
źródło
1
Czy możesz podać wyjaśnienie lub wynik tego, co się dzieje, zamiast pożądanego rezultatu?
Patrick
Otrzymuję pomoc jako wynik - Coś jest nie tak z parametrami tutaj:openssl req -x509 -config openssl.cnf -nodes -days 7300 -signkey server.key -out /etc/ssl/private/pure-ftpd.pem
TheNiceGuy
W razie problemów najlepiej podać dane wyjściowe błędów. Zgaduję, że twój problem jest z powodu -signkey. To nie jest poprawna openssl reqopcja w moim systemie. Komunikat o błędzie będzie miał to jako pierwszy wiersz:unknown option -signkey
Patrick
Cóż, ten znak powinien powiedzieć SSL, aby używał dostarczonego klucza, jak wiem?
TheNiceGuy,
Twój „normalny sposób utworzenia certyfikatu” nie wymaga żadnych danych. Czy nie chcesz, aby coś generowało? Następnie użyj 2> /dev/null.
wingedsubmariner

Odpowiedzi:

51

Brakuje tylko włączenia podmiotu certyfikatu do -subjflagi. Wolę to od utworzenia pliku konfiguracyjnego, ponieważ łatwiej jest zintegrować go z przepływem pracy i nie wymaga późniejszego czyszczenia.

Klucz One Step i generowanie csr:

openssl req -new -newkey rsa:4096 -nodes \
    -keyout www.example.com.key -out www.example.com.csr \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"

Generowanie certyfikatu bez hasła w jednym kroku:

openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key  -out www.example.com.cert

Żadne z tych poleceń nie monituje o żadne dane.

Zobacz moją odpowiedź na to prawie identyczne pytanie na Super User.

bahamat
źródło
Cóż, to miłe rozwiązanie. Sprawia, że ​​kody są znacznie mniejsze. Dzięki: D
TheNiceGuy
1
Nie zmodyfikowałem jego oryginalnego pliku konfiguracyjnego, ponieważ myślałem, że może to oznaczać bardziej skomplikowany certyfikat. Niektóre konfiguracje, których nie można przedstawić za pomocą -subjparametru, szczególnie gdy wchodzisz w rozszerzenia v3 i parametry subjectAltName.
robbat2
1
Możesz także użyć -batch(tryb nieinteraktywny)
Eran H.
Zauważ, że pierwsze polecenie wydaje się wymagać istnienia klucza, zanim będzie można go wykonać w miejscu, w którym drugie polecenie tworzy klucz i certyfikat automatycznie, ponieważ -subjjest to podstawowy prawidłowy wbudowany CSR.
dragon788
@ dragon788 Dziękujemy za zwrócenie na to uwagi. Naprawiłem to.
bahamat
1

Polecenie, którego szukasz, to:

openssl req -new -x509 -config openssl.cnf -nodes -days 7300 -key server.key -out /etc/ssl/private/pure-ftpd.pem

Zmiany w twojej wersji:

  • -new jest wymagany do wygenerowania czegokolwiek
  • -key używane zamiast -signkey
robbat2
źródło