Uma vez que haja um par de candidatos válido (ambos os peers conseguem se conectar e trocar dados entre si), é hora de tornar a conexão segura. DTLS é um protocolo criptográfico que criptografa os dados para evitar a inspeção ou modificação do conteúdo dos dados trocados.
O DTLS requer as bibliotecas openSSL (a partir do openSSL 1.1+), a menos que RTCOptions.DTLSOptions.IOHandler = iohNativeTLS
Com RTCOptions.DTLSOptions.IOHandler = iohNativeTLS o handshake DTLS e a troca de chaves DTLS-SRTP rodam sobre o mecanismo DTLS 1.2 nativo do pacote sgcCrypto, portanto o WebRTC funciona sem OpenSSL. Os perfis SRTP (SRTP_AEAD_AES_128_GCM, SRTP_AES128_CM_SHA1_80, SRTP_AES128_CM_SHA1_32 e SRTP_AEAD_AES_256_GCM) são negociados e as chaves SRTP exportadas da mesma forma que no caminho OpenSSL. Veja Executar sem OpenSSL.
A configuração do DTLS pode ser encontrada na propriedade RTCOptions.DTLSOptions do TsgcRTCPeerConnection. Para habilitar o DTLS, defina a propriedade RTCOptions.DTLS como True. Veja abaixo as principais propriedades:
RootCertFile: caminho para o repositório de certificados confiáveis usado para verificar a outra ponta, normalmente um arquivo com a autoridade certificadora. Este é o mesmo significado que a propriedade tem nos transportes TLS e QUIC. Não é o certificado deste endpoint, e uma configuração que define RootCertFile e KeyFile deixando CertFile vazio gera um erro quando a conexão é iniciada.
CertFile: caminho para o arquivo de certificado deste endpoint. O arquivo pode conter o certificado junto com os seus intermediários, portanto um arquivo de cadeia funciona.
KeyFile: caminho para o arquivo de chave do certificado.
VerifyCertificate: se a cadeia de certificados da outra ponta deve ser verificada, habilite esta propriedade. O WebRTC autentica a outra ponta pelo fingerprint transportado no SDP, e não por uma cadeia de certificados, portanto deixar esta propriedade desabilitada é a configuração normal do WebRTC, e ela não é afetada pela verificação de cadeia agora aplicada nos transportes DTLS.
VerifyDepth: é uma propriedade Integer que representa o número máximo de links permitidos quando a verificação é realizada, ou seja, a profundidade máxima de cadeia aceita ao verificar o certificado da outra ponta.
OpenSSL_Options: configuração das bibliotecas openSSL.
APIVersion: permite definir qual API OpenSSL será utilizada. Somente a API OpenSSL 1.1+ suporta DTLS.
oslAPI_1_1: usa a API 1.1 do OpenSSL, requer nossa biblioteca Indy personalizada e permite usar as bibliotecas OpenSSL 1.1.1 (com suporte a TLS 1.3).
oslAPI_3_0: utiliza a API 3.0 do OpenSSL, requer nossa biblioteca Indy personalizada e permite utilizar as bibliotecas OpenSSL 3.0.0 (com suporte a TLS 1.3).
LibPath: aqui você pode configurar onde estão localizadas as bibliotecas openSSL
oslpNone: este é o padrão, as bibliotecas openSSL devem estar na mesma pasta onde está o binário ou em um caminho conhecido.
oslpDefaultFolder: define automaticamente o caminho openSSL onde as bibliotecas devem estar localizadas para todas as personalidades do IDE.
oslpCustomFolder: se esta for a opção selecionada, defina o caminho completo na propriedade LibPathCustom.
LibPathCustom: quando LibPath = oslpCustomFolder, defina aqui o caminho completo onde estão localizadas as bibliotecas openSSL.
UnixSymLinks: habilita ou desabilita o carregamento de SymLinks em sistemas Unix (por padrão está habilitado, exceto no OSX64):
oslsSymLinksDefault: por padrão estão habilitados, exceto sob OSX64 (após o MacOS Monterey falha ao tentar carregar a biblioteca sem versão.).
oslsSymLinksLoadFirst: Carrega os SymLinks e faz isso antes de tentar carregar as bibliotecas de versão.
oslsSymLinksLoad: Carrega os SymLinks após tentar carregar as bibliotecas de versão.
oslsSymLinksDontLoad: não carrega os SymLinks.