Menu ▾ ▴

https interno

Mobius One

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 2.0 🚧 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


Related

Wiki: https
Wiki: quic