Em poucas palavras: basicConstraints = CA: VERDADEIRO / FALSO
Diz se o certificado é um certificado de uma CA. Somente autoridade pode emitir um certificado.
O atributo keyUsagediz 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, ...