Como configurar corretamente a CA openssl para gerar certificados de cliente ssl

9

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?

SWilk
fonte
Revise "cert_opt = ca_default" que parece estar criando uma substituição.
Zedman9991
Esta parece ser uma boa pergunta, anos depois e nenhuma resposta?
Evan Carroll
Sim, sem resposta. Eu não descobri isso sozinho. Mas nosso teste beta do EDI está em andamento e terei que resolvê-lo no futuro próximo para a versão de produção.
SWilk
Fiz minha melhor tentativa em uma resposta abaixo, mas se você puder incluir uma cópia da saída openssl x509 -text -nameopt multiline -certopt no_sigdump -certopt no_pubkey -noout -in one_of_your_client_certificates.peme da seção de extensões do seu openssl.cnfarquivo, verei se posso fornecer conselhos mais específicos.
Calrion #

Respostas:

4

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:

[user]
basicConstraints = critical,CA:FALSE
extendedKeyUsage = clientAuth,emailProtection
subjectAltName=email:copy
crlDistributionPoints = URI:http://www.rgweb.org/ca/rgweb-ca.crl
authorityKeyIdentifier=keyid:always
authorityInfoAccess = caIssuers;URI:http://www.rgweb.org/ca/rgweb-ca.cer

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.

subjectAltNamepermite incluir informações sobre o assunto que não pode ser incluído no subjectcampo. 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 email subjectAltNameno assunto e não no assunto; você não precisa incluir um endereço de e-mail e pode omitir a extensão.

crlDistributionPointslista 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, uma http://URL é provavelmente a melhor (CRLs são assinadas digitalmente, portanto não há necessidade httpse pode causar problemas de loop de confiança).

authorityKeyIdentifiergeralmente é 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 do subjectKeyIdentifiercertificado da CA de emissão .

authorityInfoAccessé um pouco parecido, crlDistributionPointsmas 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 basicConstraintse extendedKeyUsage; 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 é.

Calrion
fonte
Obrigado pela sua resposta. Eu já perdi minha esperança. Vou ler sobre isso mais tarde hoje e voltar para você assim que puder.
SWilk