Openssl armazenamento de certificado p12 extrair certificados individuais preservando nomes

1

Eu tenho um armazenamento de certificados p12, e há muitos certificados, eles estão relacionados a alguns sites diferentes, então há muitos certificados para um site. Estou tentando extraí-los todos de uma forma, que irá preservar seus nomes, porque há uma informação importante sobre o nome, identificando usuário cert por dados privados. Mas até agora eu tentei isso:

pkcs12 -in myDatabaseCerts.p12  -clcerts -nokeys -out publictheCerts.pem

Dessa forma, posso obter todos os certificados em um único arquivo.

e

openssl pkcs12 -in myDatabaseCerts.p12 -nocerts -out keys.pem

Existe uma maneira de extrair todos esses dados em arquivos individuais de crt e key e preservar seus nomes automaticamente? Então eu começaria a lista no final como:

John_Williams_ID_18321239.crt e John_Williams_ID_18321239.privatekey(or .pem)

Eu quero dividir o p12 em arquivos como este, porque depois eu preciso montar cada par no arquivo p12 individual, então basicamente converter todo o p12 storage, em muitos arquivos individuais que contém apenas um par key : certificate . Existe uma maneira de fazer isso com o openssl? Ou a única maneira seria gerar arquivos separados com chave e certificado e analisá-los usando algum script escrito?

    
por Vlad 19.07.2016 / 05:49

1 resposta

2

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.

    
por 19.07.2016 / 09:47