Jak używać argumentu hasła w wierszu polecenia, aby openssl do deszyfrowania

54

Dlatego przekazywanie hasła za pomocą argumentu wiersza poleceń nie jest najbezpieczniejszą praktyką. To powiedziawszy, dokumentacja dla openssl pomyliła mnie, jak przekazać argument hasła do komendy openssl.

Oto, co próbuję zrobić

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d

Następnie pojawia się monit o podanie klucza dostępu do odszyfrowania. Przeszukałem dokumenty openssl i strony internetowe, aby znaleźć odpowiedź, jeśli po prostu chcę podać hasło do polecenia bez próby powtórzenia hasła do pliku. Próbowałem dodawać -pass:somepasswordi -pass somepasswordzarówno z cytatami, jak i bez nich, bezskutecznie.

W końcu wymyśliłem odpowiedź i zobaczyłem na innych forach, że ludzie mają podobne pytania, więc pomyślałem, że opublikuję tutaj moje pytanie i odpowiedź dla społeczności.

Uwaga: Używam openssl w wersji 0.9.8y

David Sulpy
źródło

Odpowiedzi:

108

Dokumentacja nie była dla mnie bardzo jasna, ale miała odpowiedź, wyzwanie nie było w stanie znaleźć przykładu.

Oto jak to zrobić:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -pass pass:somepassword

Zauważ, że po składni komend wiersza poleceń zawsze -passwystępuje spacja, a następnie typ pass:podanego hasła, tj. Zwykłe hasło, a następnie rzeczywiste hasło po dwukropku bez spacji.

Dodatkowo dokumentacja określa, że ​​możesz podać inne źródła hasła, wykonując następujące czynności:

  • env:somevar aby uzyskać hasło ze zmiennej środowiskowej
  • file:somepathname aby uzyskać hasło z pierwszego wiersza pliku w lokalizacji pathname
  • fd:number aby uzyskać hasło z numeru deskryptora pliku.
  • stdin czytać ze standardowego wejścia

Teraz, kiedy napisałem to pytanie i odpowiedź, wszystko wydaje się oczywiste. Ale z pewnością zajęło to trochę czasu i widziałem, że zajęło to innym podobny czas, więc mam nadzieję, że może to skrócić ten czas i szybciej odpowiedzieć innym! :)

W OpenSSL 1.0.1e parametrem do zastosowania jest -passinlub -passout. Tak więc przykładem może być:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -passin pass:somepassword

David Sulpy
źródło
Jaka jest różnica między używaniem passin a passout? - Ha! Po prostu to sprawdziłem, stdin kontra stdout oczywiście!
dtmland
Zauważ, że dokumentacja opcji haseł dotyczących większości openssl poleceń (nie tylko enc) znajduje się na stronie podręcznika dla openssl (1) również w Internecie pod „OPCJAMI”. Ale nie wierzę w twoje ostatnie zdanie na temat -passin / out; inne openssl polecenia jak rsa dsa ec pkey pkcs8 pkcs12 req canależy używać tych, ale w każdej wersji Widziałem tym 1.0.1e zbudowany bezpośrednio od źródła upstream enczastosowań -passlub -k -kfileudokumentowane (z encpodręcznika).
dave_thompson_085
Co powiesz na openssl dgstpolecenie? Jak wpisać hasło w wierszu poleceń?
frakman1
4
btw -passinsłuży do podania hasła do certyfikatu wejściowego, i -passoutdo nowo wygenerowanego certyfikatu
drmad
7

Użyłem -passini -passoutustawiłem hasła do obu plików na przykład:

openssl pkcs12 -in voip.p12 -out voip.pem -passin pass:123 -passout pass:321

gdzie 123i 321są hasłem

Michaił Karpenko
źródło
5

W tej chwili Ubuntu 14.04 LTS jest wyposażony w openssl 1.0.1f-1ubuntu2.16

W tej wersji parametrem, którego należy użyć, jest -k

Przykład:

openssl enc -aes-256-cbc -e -in some_file.unenc -out some_file.enc -k somepassword
Javier
źródło
1
w twoim przykładzie -k jest opcją dostępną dla komendy openssl 'enc' (try man enc), nie jest opcją ogólną. Jeśli spojrzysz na man opensslto, zobaczysz pod nagłówkiem „Opcje frazy wyrażenia”, jakie są ogólne opcje; pass:password, env:var, file:pathname, fd:numberI stdin, jak wspomniano w poprzedniej reakcji.
sibaz