Por mais que você especule, você pode facilmente analisar a saída de openssl pkcs12
para dividir as partes se e somente se o identificador desejado for o nome amigável e / ou localkeyid, porque esses são os únicos dois metadados geralmente fornecidos. Por exemplo, para as chaves privadas usando apenas friendlyName porque é mais fácil e geralmente deve ser suficiente:
openssl pkcs12 -in combined -nocerts | awk '/friendlyName:/{n=$2} \
/^-----BEGIN.*PRIVATE/,/^-----END.*PRIVATE/{print >n".key"}'
Isso requer que você digite a senha da entrada p12 e digite duas vezes uma senha para cada chave de saída; Para evitar isso, você pode adicionar as opções -passin
e -passout
de acordo com a página man (supondo que não há problema em todas as chaves de saída usarem a mesma senha). Ou se não há problema em ter as chaves privadas NÃO criptografadas, adicione -nodes
- se você prontamente coloca essas de volta em novos (e criptografados) arquivos p12 e apaga com segurança (por exemplo, shred
) os arquivos não criptografados isso deveria ser seguro; caso contrário, você precisa ter muito cuidado para que nenhuma pessoa não autorizada possa ver ou obter uma cópia das chaves privadas não criptografadas.
A mesma coisa pode ser feita para os certificados, mas você pode não precisar. Se a coisa apenas que você quer é criar arquivos p12 individuais como você descreveu, e suas chaves privadas são todas diferentes, você pode fazer por cada chave privada
cat $one.key allcerts | openssl pkcs12 -export (other options) >$one.p12
e colocará em cada saída p12 somente o um cert da entrada allcerts
que corresponde a a chave.
Como alternativa, em vez da linha de comando openssl
pré-gravada, você pode escrever um programa usando biblioteca openssl que faz o que quiser: pesquisar dentro de cada um dos pacotes e sub-pacotes (após a descriptografia) , retire os dados que desejar, modifique-os (talvez traduza caracteres especiais, etc.) e assim por diante. Esse é um trabalho significativamente maior, no entanto.