Skip to content

certificado automatico

mobius1qwe edited this page Oct 7, 2026 · 1 revision

Home > HTTPS > Certificado automático

Certificado automático (TRALSelfSignedPlugin)

Important

Em desenvolvimento (1.3). 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 1.3. 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

Clone this wiki locally