Menu ▾ ▴

certificado automatico

Mobius One

Home > HTTPS > Certificado automático

Certificado automático (TRALSelfSignedPlugin)

[!IMPORTANT]
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Em uma frase: um plugin que cria um certificado autoassinado, entrega ao motor
no formato que ele quer, liga o HTTPS e renova antes de vencer.

Você vai precisar: RAL 2.0. Nada de openssl. O motor ainda precisa do que
sempre precisou para HTTPS (DLLs do OpenSSL no Indy/fpHTTP, msquic.dll...; ver
HTTPS no motor).

Em 3 linhas

uses RALSelfSigned;

RALSelfSignedPlugin1.Server := Servidor;      // ou Servidor.AddPlugin(...)
Servidor.Active := True;                      // já sobe em https
ShowMessage(RALSelfSignedPlugin1.Fingerprint); // o que o cliente vai fixar

No cliente, aceite esse certificado pela impressão digital: Cliente.SSL.Pins.Add(...)
(HTTPS no cliente).

O que ele faz ao ligar o servidor

O motor já tem O plugin
um certificado de uma CA não mexe
um autoassinado válido usa e fica de olho na validade
um autoassinado vencido ou perto de vencer renova (mesmo nome, nova chave)
nada cria os arquivos na pasta Folder (ou reaproveita os que já estão lá) e liga o HTTPS
motor sem HTTPS próprio (CGI, UniGUI) nada (State = sssUnsupported)

Com o servidor rodando, uma thread confere a cada CheckInterval e renova
RenewBeforeDays antes de vencer, sem parar o servidor (no Sagui as conexões
abertas caem na troca).

Propriedades

Propriedade Padrão O que é
HostNames localhost, 127.0.0.1, ::1 e o nome da máquina nomes e IPs pelos quais os clientes acessam, um por linha. Ponha o IP da rede
ValidDays 365 validade
RenewBeforeDays 30 quantos dias antes renovar
AutoRenew / CheckInterval ligado / 3600 s renovação automática
Folder %LOCALAPPDATA%\PascalRAL\certs (Linux: ~/.config/pascalral/certs) onde ficam os arquivos. Não ponha ao lado do .exe se servir arquivos
FileName ralselfsigned-<porta> nome dos .crt, .key e .pfx
KeyBits 2048 tamanho da chave RSA

A renovação muda a impressão digital

Um cliente que fixou a impressão antiga recusa a nova. O evento
OnCertificateRenewed(Antiga, Nova) avisa; e SSL.Pins aceita várias linhas para
o mesmo servidor: distribua a nova junto com a antiga enquanto os clientes se
atualizam. Os 30 dias de RenewBeforeDays são essa janela.

Exportar para um arquivo (SHA-256, SHA-1, validade):

RALSelfSignedPlugin1.ExportFingerprint('C:\compartilhado\servidor.fingerprint');

Sem servidor: só gerar os arquivos

vGen := TRALSelfSignedPlugin.Create(nil);
vGen.Folder := 'C:\certs';
vGen.FileName := 'api';
vGen.HostNames.Text := 'api.local'#13'192.168.1.10'#13'localhost';
vGen.Generate;          // api.crt, api.key e api.pfx
vGen.Free;

Casos especiais

  • mORMot2 no Windows: precisa de Windows 10 1709 / Server 2019 ou mais novo.
  • mORMot2 smHttpSys: grava no repositório do Windows; o programa precisa
    rodar como administrador (como o netsh). A reserva da URL (netsh http add urlacl) continua sendo sua.
  • Ligado a um servidor que já está rodando em http, reinicia em https.

Eventos

Evento Quando
OnCertificateCreated(Impressão) criou um certificado novo
OnCertificateRenewed(Antiga, Nova) renovou
OnError(Exceção) falhou; State = sssFailed e LastError guarda a mensagem

Veja também


Related

Wiki: https
Wiki: plugins