Criei um certificado emitido por uma CA raiz privada para poder confiar automaticamente no certificado autoassinado dentro da minha organização.
As etapas que executei levaram a um manuseio correto e confiança automática no Windows, mas falharam no iOS.
As propriedades do meu certificado raiz gerado são:
Validity: 2024-06-06 thru 2124-05-31
Public Key: RSA, 4096bits
Signature algorithm: SHA-256 with RSA Encryption
Certificate version: 3
Certificate Authority: Yes
Path length: 2
Key Usages: Certificate Signing
As propriedades do certificado de servidor gerado são:
Common name: <fqdn>
Validity: 2024-06-06 thru 2124-05-31 (100 years)
Subject alt names: <short name>, <fqdn>, <fixed IP address of server>
Public Key: RSA, 4096bits
Signature algorithm: SHA-256 with RSA Encryption
Certificate version: 3
Certificate Authority: No
Path length: 1
Key Usages: Digital Signature, Key Encipherment
Extended Usages: Server Authentication, Client Authentication
Certificate Policies: Certificate Type (2.23.140.1.2.1) [= Domain Validation]
Criei todas as chaves e certificados com OpenSSL e também verifiquei o conteúdo com OpenSSL antes de emiti-los. As etapas que executei para instalar o certificado raiz no iOS são as seguintes:
- Gerar chave privada
- Criar certificado raiz (arquivo
ca.pem
) - Baixado
ca.pem
em dispositivo iOS - Abra o arquivo baixado no dispositivo iOS
- Abrir
Settings
no dispositivo iOS - Escolha
Downloaded profile
(ou nome semelhante, funcionando em dispositivo configurado para idioma holandês) - Escolher
Install
- Abrir
Settings -> General -> Info
- Role para baixo e escolha
Trust certificates
- Habilite o perfil recém-instalado
Quando vou para Settings -> General -> VPN and device
, posso ver o perfil recém-instalado e quando clico nesse perfil, vejo que a autoridade foi verificada.
Em seguida, crio um novo certificado de servidor com as seguintes etapas:
- Crie um CSR no servidor
- Assine o certificado do servidor
server.pem
usando o CSR do servidor - Instale o certificado
server.pem
no servidor
Agora, quando abro uma página da web no servidor Windows, onde também instalei o certificado raiz, os navegadores (Firefox e Edge) não me avisam sobre um certificado não confiável e mostram diretamente a página da web solicitada.
No entanto, no iOS, o Safari reclama que a página solicitada não é segura.
Será que gerei certificados com propriedades incorretas?
Como referência incluí também os comandos para gerar as chaves e certificados usando OpenSSL (onde pass.txt
contém a senha usada para proteger o certificado):
openssl genpkey -algorithm RSA -pass file:pass.txt -out ca-key.pem -pkeyopt rsa_keygen_bits:4096 -aes256
openssl genrsa -aes256 -passout file:pass.txt -out ca-key.pem 4096
openssl rsa -in ca-key.pem -check -noout -passin file:pass.txt
openssl req -new -x509 -sha256 -days 36500 -config ca_config.txt -passin file:pass.txt -key ca-key.pem -out ca.pem
openssl x509 -req -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server.pem -days 36500 -sha256 -extfile server_config.txt -passin file:pass.txt