Crie uma CA Intermediária que possa emitir Certificados?

0

Estou tentando criar uma CA e CA Intermediária para uso em fins de assinatura / criptografia do Office 365 no Outlook. Eu pude acompanhar vários tutoriais e, com o OpenSSL, produzir uma CA e CA Intermediária que geram certificados. Estou com dois problemas:

  1. Quando eu gero um certificado de usuário final x509 do usuário final, ele é sinalizado como inválido porque a CA intermediária não tem autoridade para emitir certificados.
  2. Se eu gerar o certificado de usuário final com a CA raiz, eu pode assinar e encriptar e-mails bem, mas depois de um tempo ele pára trabalhando.

Acho que o problema 2 é causado pela não assinatura dos certificados de usuário final pela autoridade de certificação intermediária. No Exchange Online, o SMIMEExpiredCertificateThumbprint retorna a impressão digital do certificado intermediário, não a CA raiz. Ainda posso publicar um certificado de usuário final gerado pela CA raiz para a GAL e enviar alguns e-mails rápidos, mas depois que o Outlook sincronizar com a GAL, ele vê que o certificado não é gerado a partir do certificado intermediário e o declara não autorizado.

Acho que resolver o problema 1 resolverá o problema 2, mas não sei como definir permissões para uma CA intermediária para emitir certificados. Alguma ajuda?

Veja como estou gerando uma CA raiz e intermediária:

openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
openssl genrsa -out ia.key 4096
openssl req -new -key ia.key -out ia.csr
openssl x509 -req -days 730 -in ia.csr -CA ca.crt -CAkey ca.key -serial -out ia.crt

E aqui está como os clientes estão sendo gerados:

openssl genrsa -aes128 -out email.key 2048
openssl req -new -key email.key -out email.csr
openssl x509 -req -days 365 -in email.csr -CA ia.crt -CAkey ia.key -CAcreateserial -out email.crt
openssl pkcs12 -export -in email.crt -inkey email.key -out email.pfx
openssl x509 -in email.crt -serial -noout >> email.meta
openssl x509 -in email.crt -fingerprint -noout  >> email.meta
    
por Nuvious 12.08.2017 / 17:21

1 resposta

0

Então, basicamente, eu não necessariamente descobri como resolver o problema com o OpenSSL, mas descobri que o GnuTLS solicita o uso de certificados de uma maneira que seja fácil de trabalhar.

Estou gerando a CA raiz da seguinte forma:

certtool --generate-privkey --bits 4096 --outfile ca.key
certtool --generate-self-signed --load-privkey ca.key --template ca.vars --outfile ca.crt

Onde meu ca.vars se parece:

organization = [Company Name]
unit = [Org Unit]
locality = [City]
state = [State]
country = [Country Code]
challenge_password = [password]
password = [password]
expiration_days = 1825
serial = 1
ca
cert_signing_key
crl_signing_key
cn = '[Company Name] Root CA 000001'

NOTA: A senha é listada no arquivo ca.vars, que é inseguro; mas para minha implementação, um script gera o arquivo vars e, em seguida, o exclui usando a ferramenta de exclusão srm. Se você não estiver usando scripts para gerar seus arquivos vars, apenas omita as linhas password e challenge_password e você será solicitado.

Em seguida, as CAs intermediárias são as seguintes:

certtool --generate-privkey --bits 4096 --outfile ia.key
certtool --generate-request --template ia.vars --load-privkey ia.key --outfile ia.csr
certtool --generate-certificate --template ia.vars --load-request ia.csr --load-ca-certificate ca.crt --load-ca-privkey ca.key  --outfile ia.crt

A diferença entre ca.vars e ia.vars é que eu defino os dias de expiração para 365 e adiciono a seguinte linha:

path_len = 1

A partir daí, posso usar o script acima com openssl e as autoridades de certificado ia_ [assinar / criptografar] para gerar certificados x509 que posso usar no Outlook com o Office 365 para assinar / criptografar emails. Vou colá-lo novamente apenas para referência:

openssl genrsa -aes128 -out email.key 2048
openssl req -new -key email.key -out email.csr
openssl x509 -req -days 365 -in email.csr -CA ia.crt -CAkey ia.key -CAcreateserial -out email.crt
openssl pkcs12 -export -in email.crt -inkey email.key -out email.pfx
openssl x509 -in email.crt -serial -noout >> email.meta
openssl x509 -in email.crt -fingerprint -noout  >> email.meta

Espero que isso ajude alguém além de mim! :)

    
por 12.08.2017 / 17:21