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]
Na2.0 🚧o certificado automático faz tudo isto
sozinho.
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 linhaSSLVersions, 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_2precisa estar na lista (unitIdSSLOpenSSL).
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.
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.
smHttpSys, Windows)O certificado fica no Windows, não em arquivo: veja HTTP/2.
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.
1.2 🚧SSL.CertificateFile e SSL.PrivateKeyFile (.pem). Obrigatório: QUIC não tem
modo sem cifra. Ver QUIC.
Não têm SSL: o HTTPS é do servidor da frente (IIS, Apache, nginx, UniGUI).
| 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 |
| 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) |
| 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.