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.


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.