O conjunto de documentação deste produto faz o possível para usar uma linguagem imparcial. Para os fins deste conjunto de documentação, a imparcialidade é definida como uma linguagem que não implica em discriminação baseada em idade, deficiência, gênero, identidade racial, identidade étnica, orientação sexual, status socioeconômico e interseccionalidade. Pode haver exceções na documentação devido à linguagem codificada nas interfaces de usuário do software do produto, linguagem usada com base na documentação de RFP ou linguagem usada por um produto de terceiros referenciado. Saiba mais sobre como a Cisco está usando a linguagem inclusiva.
A Cisco traduziu este documento com a ajuda de tecnologias de tradução automática e humana para oferecer conteúdo de suporte aos seus usuários no seu próprio idioma, independentemente da localização. Observe que mesmo a melhor tradução automática não será tão precisa quanto as realizadas por um tradutor profissional. A Cisco Systems, Inc. não se responsabiliza pela precisão destas traduções e recomenda que o documento original em inglês (link fornecido) seja sempre consultado.
Este documento descreve um método para criar uma CA de vários níveis para criar certificados de uso geral compatíveis com dispositivos Cisco IOS® XE.
A Cisco recomenda que você tenha conhecimento destes tópicos:
As informações neste documento são baseadas nestas versões de software e hardware:
As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.
A finalidade é criar uma Autoridade de Certificação (CA) local de dois níveis com uma CA raiz e uma CA intermediária para assinar certificados de dispositivos. Uma vez assinados, os certificados são importados para o dispositivo Cisco IOS XE.
Observação: este documento usa comandos específicos do Linux para criar e organizar arquivos. Os comandos são explicados para que você possa executar a mesma ação em outros sistemas operacionais em que o OpenSSL esteja disponível.
Crie um arquivo de texto chamado openssl.conf a partir do diretório de trabalho atual na máquina em que o OpenSSL está instalado. Copie e cole essas linhas para fornecer ao OpenSSL as configurações necessárias para assinatura de certificado. Você pode editar esse arquivo para atender às suas necessidades.
[ ca ]
default_ca = IntermCA
[ RootCA ]
dir = ./RootCA
certs = $dir/RootCA.db.certs
crl_dir = $dir/RootCA.db.crl
database = $dir/RootCA.db.index
unique_subject = yes
new_certs_dir = $dir/RootCA.db.certs
certificate = $dir/RootCA.crt
serial = $dir/RootCA.db.serial
#crlnumber = $dir/RootCA.db.crlserial
private_key = $dir/RootCA.key
RANDFILE = $dir/RootCA.db.rand
name_opt = ca_default
cert_opt = ca_default
############################# Modify default days for certificates signed by Root CA (Intermediate certs only) ##################################
default_days = 360
default_md = sha256
preserve = no
policy = optional_policy
[ IntermCA ]
dir = ./IntermCA
certs = $dir/IntermCA.db.certs
crl_dir = $dir/IntermCA.db.crl
database = $dir/IntermCA.db.index
unique_subject = yes
new_certs_dir = $dir/IntermCA.db.certs
certificate = $dir/IntermCA.crt
serial = $dir/IntermCA.db.serial
private_key = $dir/IntermCA.key
RANDFILE = $dir/IntermCA.db.rand
name_opt = ca_default
cert_opt = ca_default
# Certificate field options
############################# Modify default days for certificates signed by Intermediate CA cert (device certificates)##################################
default_days = 1000
#default_crl_days = 1000
default_md = sha256
# use public key default MD
preserve = no
policy = optional_policy
[ optional_policy ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca # The extentions to add to the signed cert
string_mask = nombstr
[ req_distinguished_name ]
countryName = Country Name
countryName_default = MX
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or province
stateOrProvinceName_default = CDMX
localityName = Locality
localityName_default = CDMX
organizationName = Organization name
organizationName_default = Cisco lab
organizationalUnitName = Organizational unit
organizationalUnitName_default = Cisco Wireless
commonName = Common name
commonName_max = 64
[ req_attributes ]
# challengePassword = A challenge password
# challengePassword_min = 4
# challengePassword_max = 20
#This section contains the extensions used for the Intermediate CA certificate
[ v3_ca ]
# Extensions for a typical CA
basicConstraints = CA:true
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
subjectAltName = @Intermediate_alt_names
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
[ crl_ext ]
# CRL extensions.
#authorityKeyIdentifier=keyid:always,issuer:always
#DEFINE HERE SANS/IPs NEEDED for Intermediate CA device certificates
[Intermediate_alt_names]
DNS.1 = Intermediate.example.com
DNS.2 = Intermediate2.example.com
#Section for endpoint certificate CSR generation
[ endpoint_req_ext ]
subjectAltName = _alt_names
#Section for endpoint certificate sign by CA
[ Endpoint ]
basicConstraints=CA:FALSE
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
#Change the key usage according to the certificate usage needs
extendedKeyUsage = clientAuth
subjectAltName = _alt_names
#Define here SANS/IPs needed for Endpoint certificates
[endpoint_alt_names]
DNS.1 = Endpoint.example.com
DNS.2 = Endpoint2.example.com
#Section for IOS-XE device certificate CSR generation
[ device_req_ext ]
subjectAltName = @IOS_alt_names
#Section for IOS-XE certificate sign by CA
[ IOS_cert ]
basicConstraints=CA:FALSE
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
#Change the key usage according to the certificate usage needs
extendedKeyUsage = clientAuth , serverAuth
subjectAltName = @IOS_alt_names
#Define here SANS/IPs needed for IOS-XE certificates
[IOS_alt_names]
DNS.1 = IOSXE.example.com
DNS.2 = IOSXE2.example.com
Crie uma pasta no diretório atual chamada RootCA. Dentro dele, crie mais 3 pastas chamadas RootCA.db.tmp, RootCA.db.certs e RootCA.db.crl.
mkdir RootCA
mkdir RootCA/RootCA.db.tmp
mkdir RootCA/RootCA.db.certs
mkdir RootCA/RootCA.db.crl
Crie um arquivo chamado RootCA.db.serial dentro da pasta RootCA. Este arquivo precisa conter o valor inicial para o número de série dos certificados, 01 é o valor selecionado neste caso.
Crie um arquivo chamado RootCA.db.crlserial dentro da pasta RootCA. Este arquivo precisa conter o valor inicial para o número da lista de revogação de certificado, 01 é o valor selecionado neste caso.
echo 01 > RootCA/RootCA.db.serial
echo 01 > RootCA/RootCA.db.crlserial
Crie um arquivo chamado RootCA.db.index dentro da pasta RootCA.
touch RootCA/RootCA.db.index
Crie um arquivo chamado RootCA.db.rand dentro da pasta RootCA e preencha-o com 8192 bytes aleatórios para servir como semente do gerador de números aleatórios internos.
openssl rand -out RootCA/RootCA.db.rand 8192
Crie uma pasta no diretório atual chamada IntermCA. Dentro dele, crie mais 3 pastas chamadas IntermCA.db.tmp, IntermCA.db.certs e IntermCA.db.crl.
mkdir IntermCA
mkdir IntermCA/IntermCA.db.tmp
mkdir IntermCA/IntermCA.db.certs
mkdir IntermCA/IntermCA.db.crl
Crie um arquivo chamado IntermCA.db.serial dentro da pasta IntermCA. Este arquivo precisa conter o valor inicial para o número de série dos certificados, 01 é o valor selecionado neste caso.
Crie um arquivo chamado IntermCA.db.crlserial dentro da pasta IntermCA. Este arquivo precisa conter o valor inicial para o número da lista de revogação de certificado, 01 é o valor selecionado neste caso.
echo 01 > IntermCA/IntermCA.db.serial
echo 01 > IntermCA/IntermCA.db.crlserial
Crie um arquivo chamado IntermCA.db.index dentro da pasta IntermCA.
Crie um arquivo chamado IntermCA.db.rand dentro da pasta IntermCA e preencha-o com 8192 bytes aleatórios para servir como semente do gerador de números aleatórios internos.
touch IntermCA/IntermCA.db.index
Crie um arquivo chamado IntermCA.db.rand dentro da pasta IntermCA e preencha-o com 8192 bytes aleatórios para servir como semente do gerador de números aleatórios internos.
openssl rand -out IntermCA/IntermCA.db.rand 8192
Esta é a estrutura do arquivo após a criação de todos os arquivos iniciais de CA raiz e intermediários.
mariomed@CSCO-W-PF320YP6:/mnt/c/Users/mariomed/radsecfiles1$ tree
.
├── IntermCA
│ ├── IntermCA.db.certs
│ ├── IntermCA.db.crl
│ ├── IntermCA.db.crlserial
│ ├── IntermCA.db.index
│ ├── IntermCA.db.rand
│ ├── IntermCA.db.serial
│ └── IntermCA.db.tmp
├── RootCA
│ ├── RootCA.db.certs
│ ├── RootCA.db.crl
│ ├── RootCA.db.crlserial
│ ├── RootCA.db.index
│ ├── RootCA.db.rand
│ ├── RootCA.db.serial
│ └── RootCA.db.tmp
└── openssl.cnf
Execute este comando para criar a chave privada para a CA raiz.
openssl genrsa -des3 -out ./RootCA/RootCA.key 4096
Cuidado: o OpenSSL requer que você forneça uma senha quando uma chave for gerada. Mantenha a senha secreta e a chave privada gerada em um local seguro. Qualquer pessoa com acesso a ele pode emitir certificados como sua CA raiz.
Crie o certificado autoassinado da autoridade de certificação raiz usando o comandoreq
em openSSL. -x509
O sinalizador cria internamente uma solicitação de assinatura de certificado (CSR) e a autosassina automaticamente. Edite o parâmetro-days
e o nome alternativo do assunto. O terminal solicita que você forneça um nome comum. Certifique-se de que o nome comum digitado corresponda ao Nome alternativo do assunto (SAN).
openssl req -new -key ./RootCA/RootCA.key -out ./RootCA/RootCA.crt -config openssl.cnf -x509 -days 3650 -addext "subjectAltName = DNS:RootCA"
O arquivo gerado é chamado RootCA.crt e está localizado dentro da pasta RootCA. Este arquivo é o certificado CA raiz.
Crie uma pasta para armazenar o certificado CA intermediário assinado dentro da pasta raiz.
mkdir ./RootCA/RootCA.db.certs/IntermCA
Criar chave privada para certificado intermediário.
openssl genrsa -des3 -out ./RootCA/RootCA.db.certs/IntermCA/IntermCA.key 4096
Cuidado: o OpenSSL requer que você forneça uma senha quando uma chave for gerada. Mantenha a senha secreta e a chave privada gerada em um local seguro. Qualquer pessoa com acesso a ele pode emitir certificados como sua CA intermediária.
Criar Solicitação de Assinatura de Certificado de Autoridade de Certificação intermediária. O terminal solicita que você insira as informações do certificado.
openssl req -new -key ./RootCA/RootCA.db.certs/IntermCA/IntermCA.key -out ./RootCA/RootCA.db.certs/IntermCA/IntermCA.csr -config openssl.cnf
Assine o CSR intermediário com a seção RootCA do arquivo openssl.cnf.
openssl ca -config openssl.cnf -name RootCA -extensions v3_ca -out ./RootCA/RootCA.db.certs/IntermCA/IntermCA.crt -infiles ./RootCA/RootCA.db.certs/IntermCA/IntermCA.csr
O arquivo gerado é chamado de IntermCA.crt e está localizado dentro da pasta RootCA. Este arquivo é o certificado CA raiz.
Mova o certificado intermediário e a chave para sua própria pasta que você criou como parte dos arquivos iniciais da autoridade de certificação intermediária.
cp ./RootCA/RootCA.db.certs/IntermCA/IntermCA.crt ./RootCA/RootCA.db.certs/IntermCA/IntermCA.key ./IntermCA/
Esta é a estrutura de arquivos após a criação da chave privada e dos certificados para as CAs raiz e intermediárias iniciais.
mariomed@CSCO-W-PF320YP6:/mnt/c/Users/mariomed/radsecfiles$ tree
.
├── IntermCA
│ ├── IntermCA.crt <------Intermediate CA certficate
│ ├── IntermCA.db.certs
│ ├── IntermCA.db.crl
│ ├── IntermCA.db.crlserial
│ ├── IntermCA.db.index
│ ├── IntermCA.db.rand
│ ├── IntermCA.db.serial
│ ├── IntermCA.db.tmp
│ └── IntermCA.key <------Intermediate CA private key
├── RootCA
│ ├── RootCA.crt <------Root CA certficate
│ ├── RootCA.db.certs
│ │ ├── 01.pem
│ │ └── IntermCA
│ │ ├── IntermCA.crt
│ │ ├── IntermCA.csr
│ │ └── IntermCA.key
│ ├── RootCA.db.crl
│ ├── RootCA.db.crlserial
│ ├── RootCA.db.index
│ ├── RootCA.db.index.attr
│ ├── RootCA.db.index.old
│ ├── RootCA.db.rand
│ ├── RootCA.db.serial
│ ├── RootCA.db.serial.old
│ ├── RootCA.db.tmp
│ └── RootCA.key <------Root CA private key
└── openssl.cnf
Crie uma nova pasta para armazenar os certificados do dispositivo Cisco IOS XE.
mkdir ./IntermCA/IntermCA.db.certs/IOSdevice
Crie a chave privada do dispositivo IOSdevice.key e o dispositivo CSR IOSdevice.csr. Use a seção device_req_ext para adicionar as SANs sob a seção ao CSR.
openssl req -newkey rsa:4096 -sha256 -keyout ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.key -nodes -config openssl.cnf -out ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.csr -reqexts device_req_ext
Modifique a seção do arquivo opnessl.cnf [IOS_alt_names] para que o nome comum fornecido no CSR corresponda à SAN.
#Define here SANS/IPs needed for IOS-XE certificates
[IOS_alt_names]
DNS.1 = IOSXE.example.com
DNS.2 = IOSXE2.example.com
Assine o dispositivo IOS XE CSR com a seção intermediária CA IntermCA. Use -config
para apontar para o arquivo de configuração openSSL e -extensions
para apontar para a seção IOS_cert. Isso mantém a SAN no certificado assinado.
openssl ca -config openssl.cnf -extensions IOS_cert -name IntermCA -out ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.crt -infiles ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.csr
Após esta etapa, você criou um certificado válido para o dispositivo IOS XE chamado IOSdevice.crt com a chave privada correspondente IOSdevice.key.
Neste ponto, você implantou uma CA local e emitiu um certificado para seu dispositivo IOS XE. Você também pode usar esta CA para gerar certificados de identidade de ponto de extremidade. Esses certificados são válidos também, por exemplo, para executar a autenticação EAP Local em controladores LAN Wireless 9800 ou até a autenticação dot1x com servidores RADIUS. Esta seção o ajuda a gerar um certificado de ponto de extremidade.
Crie uma pasta para armazenar os certificados de ponto de extremidade.
mkdir ./IntermCA/IntermCA.db.certs/Endpoint
Modifique o arquivo openSSL.cnf [ endpoint_alt_names ] para que o nome comum fornecido no CSR corresponda à SAN.
#Define here SANS/IPs needed for Endpoint certificates
[endpoint_alt_names]
DNS.1 = Endpoint.example.com
DNS.2 = Endpoint2.example.com
Crie a chave privada do endpoint e o CSR da WLC com o uso da seção endpoint_req_ext para SANs.
openssl req -newkey rsa:2048 -keyout ./IntermCA/IntermCA.db.certs/Endpoint/Endpoint.key -nodes -config openssl.cnf -out ./IntermCA/IntermCA.db.certs/Endpoint/Endpoint.csr -reqexts endpoint_req_ext
Assinar o certificado do dispositivo de Ponto de Extremidade.
openssl ca -config openssl.cnf -extensions Endpoint -name IntermCA -out ./IntermCA/IntermCA.db.certs/Endpoint/Endpoint.crt -infiles ./IntermCA/IntermCA.db.certs/Endpoint/Endpoint.csr
Crie um arquivo que contenha a CA raiz e a CA intermediária no mesmo arquivo e salve-o na pasta ./IntermCA/IntermCA.db.certs/WLC/ com o nome certfile.crt conforme necessário para importar para o dispositivo Cisco IOS XE.
cat ./RootCA/RootCA.crt ./IntermCA/IntermCA.crt > ./IntermCA/IntermCA.db.certs/IOSdevice/certfile.crt
A WLC 9800 Series usa comandos diferentes para criar o arquivo pfx para importação de certificado. Para criar o arquivo pfx, execute um desses comandos de acordo com a versão do Cisco IOS XE.
Consulte Gerar e Fazer Download de Certificados CSR em Catalyst 9800 WLCs para obter informações detalhadas sobre o processo de importação de certificados
Para versões anteriores a 17.12.1:
openssl pkcs12 -export -macalg sha1 -legacy -descert -out ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.pfx -inkey ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.key -in ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.crt -certfile ./IntermCA/IntermCA.db.certs/IOSdevice/certfile.crt
Para a versão 17.12.1 ou posterior:
openssl pkcs12 -export -out ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.pfx -inkey ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.key -in ./IntermCA/IntermCA.db.certs/IOSdevice/IOSdevice.crt -certfile ./IntermCA/IntermCA.db.certs/IOSdevice/certfile.crt
Importe o certificado IOSdevice.pfx para o dispositivo Cisco IOS XE:
WLC# configure terminal
WLC(config)#crypto pki import
pkcs12 [tftp://
/
| ftp://
/
| http://
/
| bootflash:
] password
Observação: certifique-se de que os certificados de CA criados para este guia sejam confiáveis para os dispositivos que precisam verificar o certificado do dispositivo. Por exemplo, se o certificado do dispositivo for usado para fins de administração da Web no dispositivo Cisco IOS XE, qualquer computador ou navegador que acesse o portal do administrador precisará ter os certificados CA em seu armazenamento confiável.
Desabilite a verificação de revogação para os certificados, pois não há lista de revogação de certificados online que o dispositivo Cisco IOS XE possa verificar na CA que você implantou.
Você deve desabilitá-lo em todos os pontos confiáveis que fazem parte do caminho de verificação. O ponto de confiança de CA raiz tem o mesmo nome que o ponto de confiança Intermediário/Dispositivo com a cadeia de caracteres -rrr1 anexada ao final.
9800#configure terminal
9800(config)#crypto pki trustpoint IOSdevice.pfx
9800(config)#revocation-check none
9800(config)#exit
9800(config)#crypto pki trustpoint IOSdevice.pfx-rrr1
9800(config)#revocation-check none
9800(config)#exit
Para verificar as informações de certificado para os certificados criados, no terminal Linux, execute o comando:
openssl x509 -in
-text -noout
Ela mostra as informações completas do certificado.
Verifique as informações de certificado no dispositivo Cisco IOS XE.
O comandoshow crypto pki certificates verbose
imprime as informações de certificado de todos os certificados disponíveis no dispositivo.
9800#show crypto pki certificates verbose
CA Certificate <------Type of certificate
Status: Available
Version: 3
Certificate Serial Number (hex): 2A352E27C69021ECE1AA61751CA1F233E0636FB1
Certificate Usage: General Purpose
Issuer: <-------------DN for issuer
cn=RootCA
ou=Cisco Wireless
o=Cisco lab
l=CDMX
st=CDMX
c=MX
Subject: <--------------DN for subject
cn=RootCA
ou=Cisco Wireless
o=Cisco lab
l=CDMX
st=CDMX
c=MX
Validity Date: <--------Validity date
start date: 14:54:02 Central Jul 22 2024
end date: 14:54:02 Central Jul 20 2034
Subject Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit) <--------------Key size
Signature Algorithm: SHA256 with RSA Encryption
Fingerprint MD5: 432021B5 B4BE15F5 A537385C 4FAB9A94
Fingerprint SHA1: 86D18427 BE619A2A 6C20C314 9EDAAEB2 6B4DFE87
X509v3 extensions:
X509v3 Subject Key ID: 57DEEBD8 3214CA05 176F0CD6 6C842EBC 9ABFF7D8
X509v3 Basic Constraints:
CA: TRUE
X509v3 Subject Alternative Name:
RootCA <------------SANs
IP Address :
OtherNames :
X509v3 Authority Key ID: 57DEEBD8 3214CA05 176F0CD6 6C842EBC 9ABFF7D8
Authority Info Access:
Cert install time: 16:42:09 Central Jul 22 2024
Associated Trustpoints: WLC.pfx-rrr1 <----------Associated trustpoint
Storage: nvram:RootCA#6FB1CA.cer
Quando os certificados são importados para o Cisco IOS XE, os pontos confiáveis recém-criados têm a verificação de revogação habilitada. Se um certificado for apresentado ao dispositivo que precisa usar os pontos de confiança do certificado importado para validação, o dispositivo procurará uma Lista de Revogação de Certificado inexistente e falhará. A mensagem é impressa no terminal.
Jul 17 21:50:39.068: %PKI-3-CRL_FETCH_FAIL: CRL fetch for trustpoint WLC1.pfx failed
Reason : Enrollment URL not configured.
Certifique-se de que cada ponto confiável no caminho de verificação para os certificados contenha o comandorevocation-check none
.
Revisão | Data de publicação | Comentários |
---|---|---|
1.0 |
14-Oct-2024 |
Versão inicial |