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.