Po pierwsze - co się stanie, jeśli nie podam hasła? Czy użyto jakiejś pseudolosowej frazy? Po prostu szukam czegoś „wystarczająco dobrego”, aby powstrzymać przypadkowych hakerów.
Po drugie - jak wygenerować parę kluczy z wiersza poleceń, podając hasło w wierszu poleceń?
W końcu udało mi się go uruchomić za pomocą tych poleceń, używając funkcji exec (), której używanie jest ogólnie uważane za niebezpieczne, ponieważ lepiej jest podać hasło w pliku. Mogę zaakceptować to ryzyko, ponieważ jestem pewien, że PHP zostanie uruchomione tylko na moim komputerze (z systemem Windows i bez polecenia PS).
openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub
Wielkie dzięki dla @caf, bez którego nie byłoby to możliwe.
Żałuję tylko jednego - że bez względu na to, jak bardzo Google, nikt nie wydaje się openssl_pkey_new()
pracować z Xampp w systemie Windows (co jest właściwym sposobem na wygenerowanie pary kluczy)
openssl_pkey_new()
... jest „właściwym” sposobem generowania pary kluczy?ps
ale od Vista mawmic process get commandline
Odpowiedzi:
Jeśli nie używasz hasła, klucz prywatny nie jest zaszyfrowany żadnym szyfrem symetrycznym - jest przesyłany całkowicie bez ochrony.
Możesz wygenerować parę kluczy, podając hasło w wierszu poleceń za pomocą wywołania takiego jak (w tym przypadku hasło to
foobar
):Należy jednak pamiętać, że to hasło może zostać przechwycone przez dowolny inny proces działający w tym czasie na komputerze, ponieważ argumenty wiersza poleceń są ogólnie widoczne dla wszystkich procesów.
Lepszą alternatywą jest zapisanie hasła do pliku tymczasowego chronionego uprawnieniami do pliku i określenie, że:
Lub podaj hasło na standardowe wejście:
Możesz także użyć nazwanego potoku z
file:
opcją lub deskryptorem pliku.Aby następnie uzyskać pasujący klucz publiczny, musisz użyć
openssl rsa
tego samego hasła z-passin
parametrem, które zostało użyte do zaszyfrowania klucza prywatnego:(Oczekuje zaszyfrowanego klucza prywatnego na standardowym wejściu - zamiast tego można go odczytać z pliku za pomocą
-in <file>
).Przykład tworzenia 3072-bitowej pary kluczy prywatnych i publicznych w plikach, z parą kluczy prywatnych zaszyfrowanych hasłem
foobar
:źródło
openssl
polecenie wyświetla klucz publiczny odpowiadający dostarczonemu kluczowi prywatnemu - klucze publiczne nie są szyfrowane (nie są tajne), więc używanie-passout
nie ma sensu. Prawdopodobnie będziesz chciał użyć-passin
tam hasła, które zostało użyte do zaszyfrowania klucza prywatnego w pierwszym kroku. Dodałem też coś do odpowiedzi.openssl genrsa 2048 -aes128 -passout pass:foobar -out privkey.pem
tego nie robi. Czy możesz mi podać dwie komendy - jedną do wygenerowania klucza prywatnego do pliku i drugą do wygenerowania klucza publicznego (również w pliku)? Przepraszam, że jestem taka uciążliwa, ale-out
parametr pojawia się po2048
- naprawdę, to ma być ostatnia rzecz w linii poleceń (zaktualizowałem moją odpowiedź jako taką). Zobacz ostatni przykład, myślę, że tego chcesz. Jeśli chodzi o AES-128, ktoś , komu ufam w tych sprawach, zaleca go zamiast AES-256.genrsa
został zastąpiony przezgenpkey
& po ręcznym uruchomieniu w terminalu zapyta o hasło:Jednak po uruchomieniu ze skryptu komenda nie poprosi o podanie hasła, więc aby uniknąć wyświetlenia hasła, gdy proces używa funkcji w
shell
skrypcie:źródło