Skip to content
mobius1qwe edited this page Oct 7, 2026 · 1 revision

Home > HTTPS > HTTPS no motor

HTTPS no motor (servidor)

Vale para a 1.1 em diante · Nível: intermediário

Em uma frase: dizer ao motor onde estão o certificado e a chave, e ligar SSL.Enabled.

Você vai precisar: cert.pem e key.pem (Criar um certificado) e, conforme o motor, as DLLs do OpenSSL (tabela no fim).

Tip

Na 1.3 🚧 o certificado automático faz tudo isto sozinho.

Indy

Servidor.SSL.SSLOptions.CertFile    := 'cert.pem';
Servidor.SSL.SSLOptions.KeyFile     := 'key.pem';
Servidor.SSL.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]; // obrigatório
Servidor.SSL.Enabled := True;   // antes do Active
Servidor.Active := True;

Warning

Sem a linha SSLVersions, o Indy oferece só TLS 1.0, que o Windows recusa: todo cliente falha com (12175) A security error occurred, que parece erro de certificado e não é. sslvTLSv1_2 precisa estar na lista (unit IdSSLOpenSSL).

fpHTTP (Lazarus)

Servidor.SSL.SSLOptions.CertificateFile := 'cert.pem';
Servidor.SSL.SSLOptions.PrivateKeyFile  := 'key.pem';
Servidor.SSL.Enabled := True;

Sem arquivo nenhum, o fpHTTP inventa um certificado a cada início (fraco, sem nome, muda sempre). Serve para um teste rápido; não para produção.

mORMot2 (smThreads / smAsync)

Sistema O que o motor quer
Windows um .pfx (certificado + chave juntos): SSL.CertificateFile := 'cert.pfx' e SSL.PrivateKeyPassword = a senha do .pfx. PrivateKeyFile é ignorado
Linux os dois .pem: SSL.CertificateFile e SSL.PrivateKeyFile
Servidor.SSL.CertificateFile := 'cert.pfx';   // Windows
Servidor.SSL.PrivateKeyPassword := 'minhasenha';
Servidor.SSL.Enabled := True;

Fazer o .pfx: openssl pkcs12 -export -inkey key.pem -in cert.pem -out cert.pfx -passout pass:minhasenha. Prefere os .pem também no Windows? Chame OpenSslInitialize (unit mormot.lib.openssl11) no início do programa e ponha as DLLs do OpenSSL ao lado.

mORMot2 (smHttpSys, Windows)

O certificado fica no Windows, não em arquivo: veja HTTP/2.

Sagui

O Sagui quer o conteúdo dos arquivos, não o nome:

Servidor.SSL.Certificate := TFile.ReadAllText('cert.pem'); // unit System.IOUtils
Servidor.SSL.PrivateKey  := TFile.ReadAllText('key.pem');
Servidor.SSL.Enabled := True;

E a libsagui tem de ser a versão com TLS; senão aparece This version of TLS is not supported by the lib.

MsQuic 1.2 🚧

SSL.CertificateFile e SSL.PrivateKeyFile (.pem). Obrigatório: QUIC não tem modo sem cifra. Ver QUIC.

CGI e UniGUI

Não têm SSL: o HTTPS é do servidor da frente (IIS, Apache, nginx, UniGUI).

Resumo

Motor Certificado Chave Formato Senha da chave
Indy SSL.SSLOptions.CertFile SSL.SSLOptions.KeyFile nome do .pem SSL.SSLOptions.Key
fpHTTP SSL.SSLOptions.CertificateFile SSL.SSLOptions.PrivateKeyFile nome do .pem SSL.SSLOptions.KeyPassword
mORMot2, Windows SSL.CertificateFile (dentro do .pfx) nome do .pfx SSL.PrivateKeyPassword
mORMot2, Linux SSL.CertificateFile SSL.PrivateKeyFile nome do .pem SSL.PrivateKeyPassword
Sagui SSL.Certificate SSL.PrivateKey conteúdo do .pem SSL.PrivatePassword
MsQuic SSL.CertificateFile SSL.PrivateKeyFile nome do .pem SSL.PrivateKeyPassword

O que precisa estar na máquina

Motor Arquivos
Indy ssleay32.dll e libeay32.dll do OpenSSL 1.0.2 (um OpenSSL 3 renomeado não serve)
fpHTTP libssl-1_1.dll e libcrypto-1_1.dll (ou -x64) no Windows; o OpenSSL do sistema no Linux
mORMot2 nada no Windows (SChannel); OpenSSL no Linux
Sagui libsagui compilada com TLS
MsQuic msquic.dll (versão OpenSSL)

Erros comuns

Mensagem Causa O que fazer
Could not load SSL library (Indy) faltam as DLLs do OpenSSL 1.0.2 coloque ssleay32.dll e libeay32.dll ao lado do .exe
(12175) A security error occurred no cliente Indy sem SSLVersions inclua sslvTLSv1_2
PFXImportCertStore ... CRYPT_E_BAD_ENCODE (mORMot2) .pem onde o Windows quer .pfx gere o .pfx
mORMot2 serve um certificado que você não escolheu CertificateFile vazio: o Windows pegou o primeiro do repositório preencha CertificateFile
Sagui não sobe com um certificado bom nome do arquivo em vez do conteúdo TFile.ReadAllText
o cliente recusa por nome o certificado não lista o IP/nome usado refaça com o SAN certo (Criar certificado)

Manual completo (inglês): src/engine/SSL.md no repositório.

Veja também

Clone this wiki locally