Repository navigation
https interno
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.
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).
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.
| 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.
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.
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.
Começar
Servidor
- Rotas e parâmetros
- Ler o pedido e responder
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar