Adicionando nomes alternativos de assunto (SAN) a uma solicitação de assinatura de certificado (CSR) existente

9

Alguém pode me dizer como adiciono um número de nomes alternativos de assuntos a um CSR existente?

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

Antecedentes: O problema que temos é que o chassi blade HP permite gerar CSRs, mas eles permitem apenas uma única SAN. Não podemos usar um CSR gerado em outro lugar, pois não conseguimos usar o certificado resultante, pois não há como (que eu possa encontrar) carregar a chave no chassi do blade.

O processo padrão da nossa CA não permite adicionar SANs na hora da assinatura. Eles estão dispostos a experimentar, no entanto, estou tentando encontrar uma solução no final, pois isso significa que não precisaremos contar com 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á ficando difícil. Por exemplo, quando um membro da equipe que conhece o processo fora do padrão não está presente devido à saída etc.

O método atual é conectar-se ao administrador de bladechassis a bordo via web gui e gerar o CSR com um único CN.

O GUI da Web permite apenas uma única SAN no CSR.

Em seguida, assinamos com a seguinte estrofe 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 possui as SANs extras.

Jason Tan
fonte
Como você está gerando os certificados no chassi blade atualmente? Que método você está usando para conectar etc. qual modelo de chassi blade?
Eli
O chassi é um c7000. Sim, atualmente estamos criando CSRs no chassi e adicionando a SAN na hora da assinatura, mas isso é para certificados autoassinados.
Jason Tan
Que método você está usando para se conectar a ele atualmente e qual é o seu processo para gerar certificados para ele?
Eli
Eu editei a questão principal para incluir o método atual.
Jason Tan
1
Você pode importar a Cert & Private Key se a gerar em outra máquina e exportá-la?
Clint

Respostas:

15

Se o seu chassi não suportar a adição de SANs, será necessário retirar a chave do chassi e gerar o CSR com o openssl.

Verifique se não req_extensions = v3_reqestá comentado na [ req ]seção.

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

Gere um novo CSR.

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

Você não pode editar um CSR existente.

Cakemox
fonte
O que o cakemox disse. Se você pudesse editar um certificado (ou seja, um CSR assinado) após a assinatura, isso anularia todo o objetivo das autoridades de certificação.
21911 MadHatter
Não quero editar o CSR depois de assinado - isso, como você diz, derrota a puprose. Quero editar o CSR depois que ele é gerado, mas ANTES de ser assinado. É definitivamente possível editar partes de um CSR antes de assinar usando o openssl.
Jason Tan
Se eu pudesse baixar a chave, faria. Desculpe, não mencionei isso na pergunta original, mas não consegui encontrar o download da chave. Eu ficaria feliz em pagar a recompensa a alguém que pudesse me dizer como baixar a chave.
Jason Tan
FYI - É definitivamente possível editar partes de um CSR antes de assinar usando o openssl, em particular a opção "openssl req -subj". Isso não será, no entanto, até onde eu sei adicionar a extensão SAN v3, apenas permitirá que você especifique uma nova linha de assunto, incluindo CNs adicionais.
Jason Tan
2
O CSR é assinado pela chave privada da máquina; portanto, você não pode editá-lo depois de ter sido gerado (caso contrário, ele deixaria de ser assinado). É possível que a CA edite os campos colocados no certificado público; essa é a única maneira de alterar o campo SAN (sobre o qual você não tem controle se estiver enviando isso para uma CA pública).
Chris S
0

Nota importante: Tudo isso é um pouco especulativo; portanto, se você está profundamente envolvido no código e não concorda com o que estou dizendo, acredite no código. Não sou especialista em CA, apenas jogo na TV. Dito isto:

Como um recurso de CSRs, será difícil. A etapa final na geração de um CSR programaticamente é fazer o hash de tudo que você criou e assiná-lo com a chave privada. Portanto, embora você pudesse adicionar esses atributos ao texto do CSR, a assinatura não corresponderia ao conteúdo, portanto, nenhuma autoridade de certificação o assinaria.

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

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

Destes, o número 1 parece de longe o mais fácil. Você precisará quebrar o selo inviolável do 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.

BMDan
fonte
Em pesquisas adicionais, a opção 2 também é bastante simples e é executada por várias CAs (por exemplo, para adicionar site.coma um www.site.comcertificado como uma SAN).
BMDan
0

Embora a resposta da cakemox seja definitivamente a mais fácil, se você puder obter uma cópia da chave privada, existe outra maneira, se você não puder basicamente assinar novamente o CSR usando um certificado "Agente de inscrição".

Esta publicação no blog css-security.com tem todos os detalhes básicos. Mas a visão geral de alto nível do processo é assim:

  • 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 da SAN
  • Use o certificado EA para renunciar ao CSR enquanto adiciona as informações da SAN

Quando tentei isso pessoalmente, tenho certeza de que pulei a parte sobre a modificação do 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, prossiga normalmente com o processo de emissão.

Ryan Bolger
fonte