Estou configurando minha primeira autoridade de certificação. Seu objetivo será emitir certificados para nossos clientes, que os usarão para acessar nosso serviço EDI por https. Então, eu preciso gerar certificados de cliente SSL. Todo o processo de assinatura de certificados já está funcionando e os certificados podem ser usados com sucesso para acessar nosso serviço, mas estou preocupado com uma coisa:
Os propósitos de certificado gerados são genéricos:
$ openssl x509 -purpose -noout -in client.crt.pem
Certificate purposes:
SSL client : Yes
SSL client CA : No
SSL server : Yes
SSL server CA : No
Netscape SSL server : Yes
Netscape SSL server CA : No
S/MIME signing : Yes
S/MIME signing CA : No
S/MIME encryption : Yes
S/MIME encryption CA : No
CRL signing : Yes
CRL signing CA : No
Any Purpose : Yes
Any Purpose CA : Yes
OCSP helper : Yes
OCSP helper CA : No
Eu sinto que não deve haver outros propósitos, mas o cliente SSL e a assinatura S / MIME no meu caso. Estou errado e isso deve continuar como está?
Se estou correto e devo desativar outros propósitos, o que devo colocar na minha configuração openssl.cnf?
Aqui está minha configuração atual (removida um pouco):
[ CA_edi ]
# here was directory setup and some other stuff, cut it for clarity
x509_extensions = usr_cert # The extentions to add to the cert
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# stripped rest of config about validity days and such
[ usr_cert ]
basicConstraints=CA:FALSE
nsCertType = client, email
keyUsage = nonRepudiation, digitalSignature, keyEncipherment, keyAgreement
O que estou fazendo de errado com o fato de os certificados gerados permitirem o uso do servidor?
openssl x509 -text -nameopt multiline -certopt no_sigdump -certopt no_pubkey -noout -in one_of_your_client_certificates.pem
e da seção de extensões do seuopenssl.cnf
arquivo, verei se posso fornecer conselhos mais específicos.Respostas:
Você tem razão em se preocupar com "Assinatura de lista de certificados revogados", "CA de qualquer finalidade" e "Auxiliar de OCSP", geralmente elas são reservadas para certificados de CA ou certificados emitidos especificamente para assinar listas de revogação de certificados (CRLs, uma lista de certificados que são inválido) ou executando um servidor OCSP (semelhante às CRLs, mas um serviço online que fornece status de validade para certificados).
A página de documentação relevante do OpenSSL é para o comando x509 e x509v3_config
Aqui está a configuração do OpenSSL que eu uso para gerar certificados de cliente:
Vou levá-lo através da linha por linha:
A
basicConstraints
é definido como crítico, que significa "rejeitar este certificado se você não entender isso pouco", e especifica que o certificado é não um CA . Mesmo que alguém use o software para emitir um certificado desse certificado, ele nunca será confiável.O uso estendido de chave não é essencial, mas alguns softwares exigem que ele esteja presente e tenha uma finalidade específica listada. Isso lista a autenticação do cliente (do que você está falando) e também a assinatura e criptografia de e-mail S / MIME; você pode remover com segurança a finalidade S / MIME, se não precisar.
subjectAltName
permite incluir informações sobre o assunto que não pode ser incluído nosubject
campo. Também é usado em certificados de servidor da Web para incluir nomes de domínio para os quais o certificado pode ser usado, exceto o domínio especificado no atributo de nome comum do sujeito; esses certificados são chamados de certificados SAN (nome alternativo da entidade). É prática comum incluir o endereço de emailsubjectAltName
no assunto e não no assunto; você não precisa incluir um endereço de e-mail e pode omitir a extensão.crlDistributionPoints
lista os locais em que a LCR da autoridade emissora está disponível; informa ao software que está tentando validar o certificado "aqui é para onde ir para ver se esse certificado ainda é válido". Para uso da Internet, umahttp://
URL é provavelmente a melhor (CRLs são assinadas digitalmente, portanto não há necessidadehttps
e pode causar problemas de loop de confiança).authorityKeyIdentifier
geralmente é o hash SHA-1 da chave pública da CA de emissão (embora possa haver outros valores). Se você incluir essa extensão, o valor deverá corresponder ao valor dosubjectKeyIdentifier
certificado da CA de emissão .authorityInfoAccess
é um pouco parecido,crlDistributionPoints
mas especifica onde obter o certificado da CA de emissão e não a CRL. Isso é útil se você tiver uma longa cadeia de confiança: por exemplo, o CA-1 emite o CA-2, que emite o CA-3, que emite o certificado; o software que tenta verificar o certificado pode usar esta extensão para obter o certificado CA-3 e, em seguida, usar o valor nesse certificado para obter o certificado CA-2, etc. Geralmente, a cadeia de certificados (nesse caso, o certificado CA-2 e certificado CA-3) é fornecido junto com o certificado do sujeito (por exemplo, em uma transação SSL ou email S / MIME). Não conheço nenhum software que use essa extensão, mas também não sei. É geralmente incluído em certificados.De tudo isso, você realmente só precisa do
basicConstraints
eextendedKeyUsage
; as restrições básicas realmente devem ser críticas (ou você acabou de distribuir os certificados da CA!), e o uso estendido de chaves geralmente não é.fonte