Se meu entendimento estiver correto, uma autoridade de certificação atua como um certificado pai usado para verificar outros certificados que foram assinados pelo certificado de autoridade de certificação sem precisar instalar vários certificados de servidor para serviços da web, como servidor FTP, servidor web, Nextcloud, OpenVPN servidor etc?
Estou tentando criar um certificado de autoridade de certificação que possa distribuir para minha rede local e para amigos através de uma WAN, para que, quando eles tentem acessar um dos meus serviços, seja seguro conectar-se. Por exemplo, em vez de fornecer a eles vários certificados para cada serviço que estou hospedando, posso apenas fornecer um, o certificado CA.
Cada certificado de servidor é assinado inconscientemente pela autoridade de certificação. Portanto, ao instalar o único certificado de autoridade de certificação em sua máquina, ele verificará automaticamente os certificados do servidor porque foi assinado usando a autoridade de certificação em primeiro lugar. Corrigir?
O problema é que hoje eu tentei instalar o certificado CA no meu PC cliente Windows e tentei acessar minha GUI do OpenMediaVault por HTTPS e ainda estou recebendo uma tela de aviso não segura.
O bloco de código abaixo mostra todo o processo de criação dos certificados da CA e do servidor. Vou incluir uma captura de tela da árvore de diretórios para que você possa ver todos os arquivos e pastas. Também incluirei o conteúdo dos arquivos de configuração
My Guide
# Make OpenSSL Directory
mkdir ~/Desktop/OpenSSL
# Make Child Directories
mkdir -p ~/Desktop/OpenSSL/{ca,configs,"csr's",keys}
# Change Directory Into OpenSSL Directory
cd ~/Desktop/OpenSSL
# Create CA Certificate
openssl req -x509 -newkey rsa:4096 -keyout ca/cakey.pem -out ca/cacert.pem -days 3650 -sha256 -nodes -config configs/ca_openssl.cnf
# Create serial file
echo '01' > serial
# Create index.txt
touch index.txt
##
### Create server certificates ###
##
# OpenMediaVault
openssl genrsa -out keys/OpenMediaVault.pem 4096
openssl req -new -key keys/OpenMediaVault.pem -config configs/openmediavault_openssl.cnf -out "csr's"/OpenMediaVault.csr
# OpenWrt
openssl genrsa -out keys/OpenWrt.pem 4096
openssl req -new -key keys/OpenWrt.pem -config configs/openwrt_openssl.cnf -out "csr's"/OpenWrt.csr
##
### Sign Server Certificates With CA ###
##
# OpenMediaVault
openssl x509 -req -CA ca/cacert.pem -CAkey ca/cakey.pem -in "csr's"/OpenMediaVault.csr -out certificates/OpenMediaVault.crt -extfile configs/openmediavault_openssl.cnf -extensions v3_req -CAserial serial
# OpenWrt
openssl x509 -req -CA ca/cacert.pem -CAkey ca/cakey.pem -in "csr's"/OpenWrt.csr -out certificates/OpenWrt.crt -extfile configs/openwrt_openssl.cnf -extensions v3_req -CAserial serial
# Convert PEM to CRT
openssl x509 -outform der -in ca/cacert.pem -out "My Custom CA".crt
# Convert PEM to PKCS12
openssl pkcs12 -export -out certificate.pfx -inkey ca/cakey.pem -in ca/cacert.pem -certfile CACert.crt
'ca_openssl.cnf'
[ ca ]
default_ca = CA_default # The default ca section
[ CA_default ]
dir = ~/Desktop/"OpenSSL Certificates"
certs = $dir/certs
crl_dir = $dir/crl
database = $dir/index.txt
new_certs_dir = $dir/newcerts
certificate = $dir/cacert.pem
serial = $dir/serial
crlnumber = $dir/crlnumber
cr = $dir/crl.pem
private_key = $dir/private/cakey.pem
[ req ]
# Don't prompt for the Domanin Name (DN). Use configured values instead.
# This Saves having to type in your DN each time.
prompt = no
string_mask = default
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
# The size of the key in bits
default_bits = 4096
[ req_distinguished_name ]
countryName = GB
stateOrProvinceName = SOME_PROVINCE
localityName = SOME_CITY
organizationName = domain
organizationalUnitName = domain
commonName = domain Certificate Authority
emailAddress = user@domain.com
[ v3_ca ]
# Extensions added to the request
basicConstraints = critical, CA:TRUE
keyUsage = critical, keyCertSign, cRLSign
'openmediavault_openssl.cnf'
[ req ]
# Don't prompt for the Domanin Name (DN). Use configured values instead.
# This Saves having to type in your DN each time.
prompt = no
string_mask = default
distinguished_name = req_distinguished_name
req_extensions = v3_req
# The size of the key in bits
default_bits = 4096
[ req_distinguished_name ]
countryName = GB
stateOrProvinceName = SOME_PROVINCE
localityName = SOME_CITY
organizationName = OpenMediaVault
organizationalUnitName = OpenMediaVault
commonName = OpenMediaVault.local
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alternative_names
[ alternative_names ]
DNS.0 = domain.com
IP.0 = 192.168.1.123
'openwrt_openssl.cnf'
[ req ]
# Don't prompt for the Domanin Name (DN). Use configured values instead.
# This Saves having to type in your DN each time.
prompt = no
string_mask = default
distinguished_name = req_distinguished_name
req_extensions = v3_req
# The size of the key in bits
default_bits = 4096
[ req_distinguished_name ]
countryName = GB
stateOrProvinceName = SOME_PROVINCE
localityName = SOME_CITY
organizationName = OpenWrt
organizationalUnitName = OpenWrt
commonName = OpenWrt.local
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alternative_names
[ alternative_names ]
DNS.0 = domain.com
IP.0 = 192.168.1.1
Instalei o 'OpenMediaVault.crt' no diretório '/ certificates' e o 'OpenMediaVault.pem' no diretório '/ keys'.
O arquivo 'certificate.pfx' é o resultado do último comando na seção 'Meu guia' e foi importado para o Windows certmgr. Usei o arquivo 'My Custom CA.crt' com as opções de certificação do Firefox.
O que estou fazendo errado?
Muito Obrigado
Vai
ATUALIZAÇÃO 1
Eu acho que encontrei a causa do problema. Quando acesso https: //openmediavault.local (que é o nome comum definido no certificado), recebo esta mensagem "O certificado é válido apenas para os seguintes nomes:" Os dois mostrados na minha tela (um desfocado por questão de privacidade) são os subjectAltNames que adicionei. Por que os nomes alternativos funcionam, mas a CN não? Eu o acessei em https://192.168.1.123 e tenho um cadeado verde na barra de endereços do Firefox.
ATUALIZAÇÃO 2
Só para informar que eu adicionei o CN no subjectAltName e tudo funciona perfeitamente.
Como uma questão paralela ao OpenSSL, agora espero criar alguns certificados OpenVPN. A CA feita com o OpenSSL pode assinar meus certificados OpenVPN?