Como criar um certificado X.509 com OpenSSL apenas a partir de uma chave pública?
Neste cenário, tenho apenas a chave pública a ser certificada (formato PEM) e preciso criar um certificado X.509 a partir dela. Esta chave pública fornecida deverá estar no SubjectPublicKeyInfo
certificado X.509. A chave privada da chave pública a ser certificada não está disponível neste cenário!
Mas, é claro, a chave do emissor (CA), que será usada para assinar o certificado, está disponível – incluindo a chave privada. Entendo que preciso de uma chave privada para assinar o certificado 😏
Agora, entendo que a chave pública a ser certificada geralmente está envolvida em um CSR. E que o CSR geralmente é assinado pela chave privada da chave pública a ser certificada . Mas, como dito antes, não tenho aqui um CSR, apenas a chave pública "simples" a ser certificada . Tecnicamente, isso não deveria ser um problema. Mas o OpenSSL pode criar um certificado X.509 dessa forma de alguma forma?
A coisa mais próxima que encontrei é:
openssl x509 -new -key ca_key.pem -force_pubkey tbs_pubkey.pem -subj "/CN=Test"
Infelizmente, o comando acima gera o que parece ser um certificado "autoassinado" que contém a chave pública from tbs_pubkey.pem
e que é assinado pela chave privada from ca_key.pem
, portanto a assinatura do certificado "autoassinado" resultante é na verdade inválida... ☹️
Aqui está uma CA raiz rápida e suja:
Aqui está um exemplo de arquivo de configuração OpenSSL para adicionar extensões ao novo certificado:
Aqui está minha chave pública solitária (EC):
Agora force-o em um certificado, assinado pela CA:
A chave (desculpe o trocadilho) é usar
-CAkey
e-CA
apontar o OpenSSL para a chave privada e o certificado da CA. O Assunto deste último será usado como Emissor em seu novo certificado.Observe a pequena chave pública ECC que é assinada pela chave raiz RSA. Além disso, o Assunto e o Emissor estão corretos e as extensões do arquivo são adicionadas.
AVISO:
Isso é bom para testes, jogos, etc., mas você não deve fazer isso com um certificado CA confiável, pois ao não usar a chave privada correspondente da chave pública, você não está mostrando prova de posse dessa chave privada.
A AC deve rejeitar tais pedidos, pois não há provas de que a chave pública seja propriedade do sujeito.
Para obter mais informações, consulte RFC 4211