Como usar o argumento de senha na linha de comando para openssl para descriptografia

54

Portanto, não é a prática mais segura passar uma senha por meio de um argumento de linha de comando. Dito isto, a documentação para o openssl me confundiu sobre como passar um argumento de senha para o comando openssl.

Aqui está o que estou tentando fazer

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

Isso solicita a chave de senha para descriptografia. Pesquisei os documentos openssl e as interwebs para tentar encontrar a resposta se eu simplesmente quisesse dar a senha ao comando sem tentar repetir a senha no arquivo. Tentei adicionar -pass:somepassworde -pass somepasswordcom e sem aspas sem sucesso.

Finalmente descobri a resposta e vi em outros fóruns pessoas com perguntas semelhantes, então pensei em postar minha pergunta e responder aqui para a comunidade.

nota: estou usando o openssl versão 0.9.8y

David Sulpy
fonte

Respostas:

108

A documentação não estava muito clara para mim, mas tinha a resposta, o desafio não era poder ver um exemplo.

Veja como fazê-lo:

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

Observe que a sintaxe de comando da linha de comando é sempre -passseguida por um espaço e, em seguida, pelo tipo de senha que você está fornecendo, ou seja, pass:para a senha simples e a senha atual após os dois pontos sem espaço.

Além disso, a documentação especifica que você pode fornecer outras fontes de senha, fazendo o seguinte:

  • env:somevar obter a senha de uma variável de ambiente
  • file:somepathname para obter a senha da primeira linha do arquivo no local pathname
  • fd:number para obter a senha do número do descritor de arquivo.
  • stdin ler da entrada padrão

Agora que escrevi esta pergunta e resposta, tudo parece óbvio. Mas certamente levou algum tempo para descobrir e eu já tinha visto outras pessoas parecendo, então espero que isso possa reduzir esse tempo e responder mais rápido para os outros! :)

Com o OpenSSL 1.0.1e, o parâmetro a ser usado é -passinou -passout. Portanto, este exemplo seria:

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

David Sulpy
fonte
Qual é a diferença entre usar passin ou passout? Ha! Apenas procurei, stdin vs stdout, é claro!
dtmland
Observe que a documentação para as opções de senha que se aplicam à maioria dos openssl comandos (não apenas enc) está na página de manual do openssl (1) também na web, em 'OPÇÕES'. Mas não acredito na sua última parte sobre -passin / out; outros openssl comandos, como rsa dsa ec pkey pkcs8 pkcs12 req caos usam, mas em todas as versões que eu vi, incluindo a 1.0.1e criada diretamente a partir da fonte encusa -passou -k -kfilecomo documentado (na página de encmanual).
dave_thompson_085
E o openssl dgstcomando? Como você insere a senha para isso na linha de comando?
frakman1
4
btw -passiné usado para fornecer uma senha para o certificado de entrada, e -passouté para o novo certificado gerado
drmad
7

Eu usei -passine -passoutpara definir senhas para os dois arquivos no exemplo:

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

onde 123e 321são a senha

Mikhailo Karpenko
fonte
5

Neste momento, o Ubuntu 14.04 LTS vem com o openssl 1.0.1f-1ubuntu2.16

Nesta versão, o parâmetro a ser usado é -k

Exemplo:

openssl enc -aes-256-cbc -e -in some_file.unenc -out some_file.enc -k somepassword
Javier
fonte
1
no seu exemplo, -k é uma opção disponível para o comando openssl 'enc' (try man enc), não é uma opção geral. Se você observar, man opensslverá sob o título 'Opções de frase secreta', quais são as opções gerais; pass:password, env:var, file:pathname, fd:numberOu stdin, como mencionado em uma resposta mais cedo.
Sibaz