Extensões de certificado na geração e assinatura de certificartes usando openssl

1

Referências:

  1. Configurações SSL para certificado intermediário
  2. Como adicionar minha própria autoridade de certificação criada para repositórios confiáveis do sistema

Por que não consigo encontrar uma página que me diga quais são as extensões openssl?

Eu estava fazendo a Autenticação Mútua e, quando desejei colocar um certificado intermediário no processo, descobri que o intermediário gerado e assinado CA é autoassinado por causa da opção -sign-key .

Eu li as man pages e achei isso relevante:

Basic Constraints. This is a multi valued extension which indicates whether a certificate is a CA certificate. For example:

    basicConstraints=CA:TRUE
    basicConstraints=CA:FALSE

Key Usage : Key usage is a multi valued extension consisting of a list of names of the permitted key usages. The supported names are:

   digitalSignature, nonRepudiation, keyEncipherment, 
   dataEncipherment, keyAgreement, keyCertSign, cRLSign, 
   encipherOnly and decipherOnly.

Examples:

    keyUsage=digitalSignature, nonRepudiation
    keyUsage=critical, keyCertSign

Eu vi um critical e não crítico na visualização do certificado do navegador. Meus certificados não possuem esses campos. Também li que quando não há extensão, isso significa que seu certificado é considerado como certificado raiz e autoassinado.

Eu quero fazer quatro tipos diferentes de certificados:

rootca > serverca > server crt signed by server ca && client crt signed by server ca

Na documentação me deparei com estes:

v3_ca , v3_user , v3_ca

São essas a resposta da minha pergunta?

Meus comandos para gerar ca intermediário e assiná-lo com a chave rootca são:

openssl genrsa -out $keyfile $keysize;

openssl req -new -key $keyfile -out $reqfile -passin pass:$pw \
-subj "/C=$country/ST=$state/L=$location/O=$org/CN=$name" 2>&1;

openssl x509 -req -days $days -in $reqfile -out $certfile \
-signkey $cakeyfile 2>&1;

P:

Eu não uso um arquivo de configuração porque estou executando todas essas operações a partir de um script bash.

Eu me pergunto se alguém pode me dar uma explicação da extensão e se poderia colocá-los como argumentos e não obtê-los do bash (porque ele precisará abrir o script bash e editá-lo para cada chamada para o meu bash).

    
por Nancy Smith 07.05.2013 / 15:18

1 resposta

1

Em poucas palavras: basicConstraints = CA: VERDADEIRO / FALSO

Diz se o certificado é um certificado de uma CA. Somente autoridade pode emitir um certificado.

O atributo keyUsage

diz o que é permitido fazer com o certificado. Você pode, por exemplo, emitir um certificado apenas para assinar emails. Se você usou esse certificado em um servidor da Web (para identificar o servidor para clientes), o resultado deve ser certificado não é considerado válido - porque o uso pretendido era para assinar emails não para identificar um site. (claro que haveria CNs diferentes, mas se não fossem, funcionaria do jeito que eu descrevi).

Solução para o seu problema:

rootca - algum certificado auto-assinado

certificado serverca-ca (basicConstraints = CA: TRUE) assinado por rootca

servercrt, clientcrt - CSRs comuns assinados por serverca

Ao assinar algum certificado como uma autoridade de certificação, você deve usar: %código% outras opções são como openssl ca -CA authority.crt -CAkey authority.key ... , -config , -set_serial , ...

Na verdade, nunca usei a CA sem o arquivo de configuração, o que provavelmente responderá a outra pessoa. Eu acho que deveria ser possível inserir todos os parâmetros na linha de comando.

Você pode, no entanto, criar mais arquivos de configuração (um para cada autoridade) e fornecê-los no parâmetro -days . A vantagem desta abordagem é que você obterá o arquivo de todos os crts emitidos, o incremento automático de números de série, ...

    
por 07.05.2013 / 17:12