Adicionando Nomes Alternativos de Assunto (SAN) a uma solicitação de assinatura de certificado (CSR) existente

9

Alguém pode me dizer como eu adiciono um número de Nomes Alternativos de Assunto a um CSR existente?

Não estou falando sobre como gerar um CSR com SANs ou adicionar SANs no momento da assinatura. Eu sei como fazer as duas coisas.

Antecedentes: O problema que temos é que o chassi blade da HP permite gerar CSRs, mas eles permitem apenas uma única SAN. Não podemos usar um CSR gerado em outro lugar, pois não poderíamos usar o certificado resultante, pois não há nenhuma maneira (que eu possa encontrar) para fazer o upload da chave para o chassi blade.

O processo padrão da nossa CA não permite a adição de SANs como tempo de assinatura. Eles estão dispostos a experimentar, no entanto, estou tentando encontrar uma solução em nosso final, pois isso significa que não teremos que confiar em que eles tenham um processo não padrão para nós - na minha experiência, se eles precisarem usar um processo não padrão. a vida acabará por ficar difícil. Por exemplo. quando um membro da equipe que conhece o processo não padrão não está presente devido a sair, etc.

O método atual é conectar-se ao bladechassis onboard admin via web gui e gerar o CSR com um único CN.

O web gui permite apenas uma única SAN no CSR.

Em seguida, assinamos com a seguinte sub-rotina na configuração openssl:

[ v3_ca ]
subjectAltName = "DNS:bladesystem8,DNS:bladesystem8.services.adelaide.edu.au,DNS:bladesystem8-backup,DNS:bladesystem8-backup.services.adelaide.edu.au"

O certificado resultante tem as SANs extras.

    
por Jason Tan 31.03.2011 / 05:32

3 respostas

15

Se o seu chassi não suportar a adição de SANs, você precisará remover a chave do chassi e gerar o CSR com o openssl.

Certifique-se de que req_extensions = v3_req não tenha comentários na seção [ req ] .

Adicione o subjectAltName à seção [ v3_req ] .

Gere um novo CSR.

openssl req -new -key extracted_c7000.key -out your_new.csr

Você não pode editar um CSR existente.

    
por 08.04.2011 / 11:58
0

Nota importante: Tudo isso é um pouco especulativo, então se você está no fundo do código e não concorda com o que estou dizendo, acredite no código. Eu não sou um especialista em CA, apenas reproduzo um na TV. Dito isto:

Como uma característica dos CSRs, será difícil. A etapa final na geração de um CSR programaticamente é criar hash em tudo que você criou e, em seguida, assiná-lo com a chave privada. Portanto, embora você possa adicionar esses atributos ao texto do CSR, a assinatura não corresponderia ao conteúdo, por isso, nenhuma CA assinaria o mesmo.

No seu caso, você controla (ou pelo menos entra em contato com) a CA. Isso lhe dá duas opções:

  1. Você pode instruir a CA a ignorar a assinatura no CSR e emitir um certificado de qualquer maneira.
  2. Você pode fazer com que o CA emita um certificado diferente do que é solicitado (por exemplo, adicionando atributos).

Destes, o # 1 parece ser de longe o mais fácil. Você precisará quebrar o selo inviolável no OpenSSL para fazer isso, mas ele tem algumas funções que devem facilitar um pouco. Eu começaria com asn1parse, que mostrará como separar o CSR.

    
por 14.04.2011 / 14:49
0

Embora a resposta da cakemox seja definitivamente a mais fácil, se você puder de alguma forma obter uma cópia da chave privada, há outra maneira, se você não conseguir, assinar novamente a CSR usando um certificado "Enrollment Agent".

Este A postagem do blog css-security.com tem todos os detalhes importantes. Mas a visão geral de alto nível do processo se parece com isso:

  • Adquirir um certificado de agente de inscrição
  • Modifique um modelo de certificado SSL para exigir um certificado EA para emissão
  • Adquira um CSR que precise de informações de SAN
  • Use o certificado EA para renunciar ao CSR ao adicionar as informações da SAN

Quando experimentei isso pessoalmente, tenho certeza de que ignorei a parte sobre como modificar o modelo de certificado. Presumindo que você possa gerar um certificado de Agente de Inscrição para si mesmo, o processo real se parece com isso.

Crie um san.inf com as informações da extensão SAN

[Extensions]
2.5.29.17="{text}dns=mysan1.example&dns=mysan2.example"

Assinar novamente a solicitação

certreq -policy -config "myca.example\CA" orig-request.csr san.inf corrected-request.csr

Envie a solicitação corrigida

certreq -submit -config "myca.example\CA" -attrib "CertificateTemplate:MyTemplate" corrected-request.csr

E, em seguida, continue normalmente com o processo de emissão.

    
por 08.12.2017 / 17:42