Assinatura do OpenSSL com o PEM e um ALIAS

1

Eu preciso perguntar isso diretamente aqui, porque depois de pesquisar muito e pesquisar no StackExchange, não cheguei a ter algo relevante até agora.

Então, digamos que eu esteja usando o OpenSSL (em uma plataforma Windows, se isso importa) e um arquivo .pem para assinar um arquivo .txt; o comando que eu uso é

openssl smime -sign -in unsignedfile.txt -outform der -binary -nodetach -out signedfile.txt.p12 -signer certificate.pem -passin pass:PASSWORD

Até agora, tudo bem.

Minha pergunta é: se o arquivo .pem contiver MAIS DE UM par de chave privada / certificado - cada um deles identificado por um "friendlyName" (que eu entendo ser um alias, um identificador), como especifico             alias que eu quero usar na linha de comando acima?

Isso é possível?

Estive procurando a opção -alias no link , mas não ajudou muito.

Obrigado antecipadamente.

    
por Markino 31.08.2018 / 09:50

1 resposta

0

Não é possível.

Arquivos PEM em geral podem conter mais de um 'objeto', mas a maioria das operações de linha de comando do OpenSSL, incluindo esta, usam apenas o primeiro do tipo desejado - a primeira chave em um arquivo de chave, o primeiro certificado em um arquivo. Em particular, se você precisar de uma chave privada e de um certificado, como smime -sign , você pode ler a chave (primeira) e o (primeiro) de um único arquivo. Algumas operações ou opções usam todos os certificados em um arquivo, mas mesmo assim você não pode selecionar um específico além do primeiro.

Um arquivo PKCS12 contém dados estruturados que podem associar vários atributos, incluindo 'friendlyname' com uma chave e um certificado. Quando você 'importa' um PKCS12 com openssl pkcs12 -in file.p12 ... , a saída contém esses atributos, mas no formato PEM eles são apenas comentários e são ignorados, como tudo o mais que não está dentro de um bloco ----BEGIN x to -----END x válido. Da mesma forma, quando você cria um PKCS12 usando openssl pkcs12 -export -out file.p12 ... , você pode especificar valores de nome amigável para ir no PKCS12 como opções de linha de comando, mas qualquer um que esteja na entrada PEM será ignorado. (Você não pode especificar nenhum outro atributo, embora localkeyid seja gerado automaticamente.)

Você pode usar awk ou similar para selecionar o (s) bloco (s) desejado (s) do arquivo, algo como

awk -vwant=smeagol '/friendlyName:/{sel=($2==want)} /^-----BEGIN/,/^-----END/{if(sel)print}' <manyPEM >onePEM
# and then use onePEM

PS: a estrutura de dados gerada por smime -outform der é CMS, que é derivada de e frequentemente chamada ainda de PKCS7. Não PKCS12, que é muito diferente. Atribuir isso a .p12 provavelmente confundirá e enganará as pessoas, como seu próprio futuro.

    
por 31.08.2018 / 12:00

Tags