Czy można wygenerować klucz RSA bez hasła?

83

Pracuję z Apache2 i Passenger dla projektu Rails. Chciałbym utworzyć samopodpisany certyfikat SSL do celów testowych.

sudo openssl rsa -des3 -in server.key -out server.key.new

Kiedy wprowadzę powyższe polecenie, mówi

writing RSA key
Enter PEM pass phrase:

Jeśli nie podam hasła fraze, otrzymuję błąd poniżej

unable to write key
3079317228:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:869:Yo
u must type in 4 to 1024 characters
3079317228:error:0906406D:PEM routines:PEM_def_callback:problems getting passwor
d:pem_lib.c:111:
3079317228:error:0906906F:PEM routines:PEM_ASN1_write_bio:read key:pem_lib.c:382

Czy możliwe jest wygenerowanie klucza RSA bez podawania pass phrase, ponieważ nie jestem pewien, jak /etc/init.d/httpdskrypt uruchomi serwer HTTP bez interwencji człowieka (tzn. Jeśli podam hasło składające się z 4 znaków, oczekuje, że podam to podczas uruchamiania serwera HTTP Apache ).

diya
źródło
6
Twój wiersz poleceń mówi opensslo zaszyfrowaniu istniejącego klucza. To brzmi jak coś innego niż chcesz.
David Schwartz
Apache httpd można skonfigurować tak, aby uzyskiwał (a) hasło prywatne w sposób nieinteraktywny; zobacz dokument mod_ssl lub w wielu przypadkach komentarze w dostarczonych / spakowanych plikach konfiguracyjnych. Jednak zwykle nie jest to bardziej bezpieczne niż pozostawienie klucza prywatnego niezaszyfrowanego, co jest prostsze.
dave_thompson_085

Odpowiedzi:

88

Jeśli generujesz samopodpisany certyfikat, możesz wykonać zarówno klucz, jak i certyfikat w jednym poleceniu:

openssl req  -nodes -new -x509  -keyout server.key -out server.cert

Aha, i co @MadHatter powiedział w swojej odpowiedzi na temat pominięcia -des3flagi.

Tom H.
źródło
14
Dyrektywa w sprawie węzłów jest powodem, dla którego tu jestem. (Brak szyfrowania DES klucza prywatnego)
2017
38

Pozostaw -des3flagę, która jest instrukcją openssl do szyfrowania server.key.new (która, nawiasem mówiąc, wcale nie jest nowym kluczem - jest dokładnie taka sama jak server.key, tylko ze zmienionym / usuniętym hasłem) .

Szalony Kapelusznik
źródło
21

openssl reqPolecenie od Odpowiedź @Tom H jest poprawna, aby utworzyć certyfikat z podpisem własnym w server.certzaw. klucz prywatny RSA bez hasła w server.key:

openssl req -nodes -new -x509 -keyout server.key -out server.cert

Oto jak to działa. Pominięcie -des3jak w odpowiedzi @MadHatter nie wystarczy w tym przypadku, aby utworzyć klucz prywatny bez hasła. To jest wystarczające dla tego celu w openssl rsa( „Convert klucz prywatny”) określoną przez komendy @MadHatter i openssl genrsapolecenia ( „Utwórz klucz prywatny”). Tylko nie dla openssl reqpolecenia tutaj. Potrzebujemy dodatkowo -nodes(„Proszę nie szyfrować DES server.key!”).

Tanius
źródło
17

Użyj -nodesparametru, jeśli ta opcja jest określona, ​​klucz prywatny nie będzie szyfrowany, np .:

openssl \
    req \
    -nodes \
    -newkey rsa:2048 \
    -keyout www.example.com.key \
    -out www.example.com.csr \
    -subj "/C=DE/ST=NRW/L=Berlin/O=My Inc/OU=DevOps/CN=www.example.com/[email protected]"
panticz.de
źródło
7

Po prostu uruchom go ponownie przez openssl

najpierw wygeneruj klucz za pomocą hasła

następnie openssl rsa -in server.key -out server.key

darethas
źródło
To nie działa na Ubuntu 16.04
Sweetfa
3
Odebrałem, ponieważ ta odpowiedź nie jest tym, o co pytano, również polecenie wymaga danych wejściowych i nie generuje klucza.
Don
Użytkownik już pokazał, że wie, jak wygenerować klucz. Ta odpowiedź opiera się na tej wiedzy i sugeruję, aby wziąć nowo wygenerowany klucz i przekazać go ponownie. openssl W ten sposób osiągam cel, o który został poproszony: wygenerowanie klucza bez hasła.
darethas
Działa dla mnie opensslw systemie Windows 10 z GitBash. Dzięki za informacje.
Zielony
0

Użyj następnego polecenia, aby wygenerować plik klucza prywatnego bez hasła bez szyfrowania . Ostatni parametr to rozmiar klucza prywatnego.

openssl genrsa -out my-passless-private.key 4096
nic
źródło
1
To NIE jest hasło bez hasła. Jest całkowicie i całkowicie hasłem.
dave_thompson_085
Eksperymentowałem z pozycją parametrów. Teraz jest OK. Zmieniłem miejsca dwóch ostatnich parametrów i przetestowałem polecenie.
nix
Teraz tworzy niezaszyfrowany plik. Opcje po (tylko) argumencie pozycyjnym są ignorowane. Spójrz na plik; nie jest zaszyfrowany. Wymień 4096 -des3się 4096 -sillywombati nadal działa i produkuje ten sam format, nadal Nieszyfrowane (ale inną wartość klucza oczywiście). Nie ma sposobu, aby mieć zaszyfrowany plik prywatny bez hasła, a prawidłowe rozwiązania dla niezaszyfrowanego pliku bez hasła podano sześć lat temu.
dave_thompson_085
Masz rację. @ dave_thompson_085. Ostatni parametr nie ma żadnego wpływu na polecenie. Zaktualizowałem swoją odpowiedź. Nie generuje zaszyfrowanego pliku klucza prywatnego zakodowanego w standardzie base64.
nix