Capítulo 10 — Criptografia e serviços de confiança: configuração de controles
Mapa da aula
Aula 10 publicada. Mapa, exemplo, EX037.
flowchart TD
N0["10.1 Metas de configuração"]
N1["10.2 Um padrão seguro para o cliente"]
N2["Laboratório — Contexto de cliente padrão"]
N3["10.3 Controle de mudanças"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX037"]
Desenho lógico
flowchart LR
N0["10.1 Metas de configuração"]
N1["10.2 Um padrão seguro para o cliente"]
N2["Laboratório — Contexto de cliente padrão"]
N3["10.3 Controle de mudanças"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX037"]
[10.1 Metas de configuração]
|
v
[10.2 Um padrão seguro para o cliente]
|
v
[Laboratório — Contexto de cliente padrão]
|
v
[10.3 Controle de mudanças]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX037]
Objetivos de aprendizagem
Você vai (1) configurar a versão do TLS e as opções de verificação de acordo com a NIST SP 800-52 Rev. 2; (2) inspecionar o contexto de cliente padrão do Python; (3) aplicar as mudanças por meio do controle de mudanças.
10.1 Metas de configuração
Priya entrega a Tomás as metas para todo endpoint TLS da Lumen, tiradas da NIST SP 800-52 Rev. 2: oferecer TLS 1.3, permitir o TLS 1.2 apenas onde clientes mais antigos precisam dele, desativar as versões anteriores, servir uma cadeia de certificados completa e usar certificados cujos nomes correspondam ao serviço. Nos clientes, as metas são verificar os certificados e os nomes de host e confiar apenas nas raízes pretendidas. Tomás aprende que muitas violações vêm de um cliente que aceita em silêncio qualquer certificado, então as configurações dos clientes merecem tanta revisão quanto as dos servidores, especialmente em scripts e integrações escritos às pressas.
10.2 Um padrão seguro para o cliente
Tomás inspeciona o ssl.create_default_context do Python na máquina do laboratório. O laboratório abaixo imprime seu modo de verificação, a verificação do nome do host e a versão mínima. Esses padrões são o que um script bem-comportado deve manter. Um antipadrão comum é definir check_hostname como False e verify_mode como CERT_NONE para fazer um erro desaparecer; isso transforma o TLS em cifração com uma parte desconhecida. Quando um script precisa confiar numa raiz interna, a correção certa é carregar essa raiz com load_verify_locations, mantendo todas as verificações ligadas, em vez de desligá-las.
Laboratório — Contexto de cliente padrão
# Inspect Python's default TLS client context; no network access.
import ssl, sys
ctx = ssl.create_default_context()
print("python", sys.version.split()[0], "|", ssl.OPENSSL_VERSION)
print("verify_mode:", ctx.verify_mode.name)
print("check_hostname:", ctx.check_hostname)
print("minimum_version:", ctx.minimum_version.name)
ctx.minimum_version = ssl.TLSVersion.TLSv1_2 # make the policy floor explicit
print("after policy, minimum_version:", ctx.minimum_version.name)
Execute com python3 lab_tlsctx.py. Saída verificada:
python 3.13.5 | OpenSSL 3.5.7 9 Jun 2026
verify_mode: CERT_REQUIRED
check_hostname: True
minimum_version: MINIMUM_SUPPORTED
after policy, minimum_version: TLSv1_2
10.3 Controle de mudanças
Mudar uma configuração de TLS num balanceador de carga compartilhado pode desconectar coletores antigos ou sistemas de parceiros. Tomás escreve uma solicitação de mudança que lista a configuração, o efeito esperado, os clientes que podem quebrar, um plano de teste e um passo de reversão. Ele confere primeiro os logs de handshake para ver se algum cliente ainda negocia TLS 1.0 ou 1.1. A mudança é feita numa janela de manutenção, e ele testa de novo depois com o s_client e com o laboratório em Python. Registrar as evidências de antes e de depois permite que a equipe prove que o controle funciona e o reverta rapidamente se um parceiro relatar problemas.
Exemplo resolvido
Tomás escreve uma solicitação de mudança para desativar o TLS 1.0 e o 1.1 no balanceador de carga do portal, confere os logs em busca de clientes antigos, aplica a mudança e registra os testes de antes e de depois.
Caso sintético. Os endpoints e os clientes são sintéticos; a SP 800-52 Rev. 2 é real.
Erros e limites
Os padrões mudam entre versões do Python e do OpenSSL; registre as versões. Desativar as versões antigas pode quebrar dispositivos legados que precisam de um plano separado.
Exercícios
-
EX037 — Política de versões. Quais versões do TLS a política da Lumen permite? Rubrica: 3 = TLS 1.3, mais TLS 1.2 apenas onde clientes mais antigos precisam; anteriores desativadas;; 2 = 1.3 e 1.2;; 1 = inclui 1.0;; 0 = nenhuma.
-
EX038 — Saída do contexto padrão. O que o laboratório informou para verify_mode e check_hostname? Rubrica: 3 = CERT_REQUIRED e True;; 2 = um valor;; 1 = CERT_NONE;; 0 = nenhuma.
-
EX039 — Correção para a raiz interna. Como um script deve confiar na raiz interna da Lumen? Rubrica: 3 = carregá-la com load_verify_locations e manter todas as verificações ligadas;; 2 = carregar a raiz;; 1 = desativar as verificações;; 0 = nenhuma.
-
EX040 — Antes da mudança. O que Tomás deve conferir antes de desativar o TLS 1.1? Rubrica: 3 = os logs de handshake, em busca de clientes que ainda negociam versões antigas;; 2 = logs;; 1 = vago;; 0 = nenhuma.
Síntese
Uma boa configuração de controles mantém a verificação ligada, segue as orientações publicadas de TLS e muda as configurações apenas por solicitações testadas e reversíveis.
Continue estudando — aula 10 (capítulo 10 de 18)
← Capítulo 09 · Índice das aulas · Capítulo 11 →
Continue para a próxima aula já escrita.