| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | .. _doc_ssl_certificates:TLS/SSL certificates====================Introduction------------It is often desired to use :abbr:`TLS (Transport Layer Security)` connections (alsoknown as :abbr:`SSL (Secure Sockets Layer)` connections) for communicationsto avoid "man in the middle" attacks. Godot has a connection wrapper,:ref:`StreamPeerTLS <class_StreamPeerTLS>`, which can take a regular connectionand add security around it. The :ref:`HTTPClient <class_HTTPClient>` and:ref:`HTTPRequest <class_HTTPRequest>` classes also support HTTPS usingthis same wrapper.Godot will try to use the TLS certificate bundle provided by the operating system,but also includes the`TLS certificate bundle from Mozilla <https://github.com/godotengine/godot/blob/master/thirdparty/certs/ca-certificates.crt>`__as a fallback.You can alternatively force your own certificate bundle in the Project Settings:.. figure:: img/tls_certificates_project_setting.webp   :align: center   :alt: Setting the TLS certificate bundle override project setting   Setting the TLS certificate bundle override project settingWhen set, this file *overrides* the operating system provided bundle by default.This file should contain any number of public certificates in`PEM format <https://en.wikipedia.org/wiki/Privacy-enhanced_Electronic_Mail>`__.There are two ways to obtain certificates:Obtain a certificate from a certificate authority-------------------------------------------------The main approach to getting a certificate is to use a certificate authority(CA) such as `Let's Encrypt <https://letsencrypt.org/>`__. This is a morecumbersome process than a self-signed certificate, but it's more "official" andensures your identity is clearly represented. The resulting certificate is alsotrusted by applications such as web browsers, unlike a self-signed certificatewhich requires additional configuration on the client side before it'sconsidered trusted.These certificates do not require any configuration on the client to work, sinceGodot already bundles the Mozilla certificate bundle in the editor and exportedprojects.Generate a self-signed certificate----------------------------------For most use cases, it's recommended to go through certificate authority as theprocess is free with certificate authorities such as Let's Encrypt. However, ifusing a certificate authority is not an option, then you can generate aself-signed certificate and tell the client to consider your self-signedcertificate as trusted.To create a self-signed certificate, generate a private and public key pair andadd the public key (in PEM format) to the CRT file specified in the ProjectSettings... warning::    The private key should **only** go to your server. The client must not have    access to it: otherwise, the security of the certificate will be    compromised... warning::    When specifying a self-signed certificate as TLS bundle in the project    settings, normal domain name validation is enforced via the certificate    :abbr:`CN (common name)` and alternative names. See    :ref:`TLSOptions <class_TLSOptions>` to customize domain name validation.For development purposes Godot can generate self-signed certificates via:ref:`Crypto.generate_self_signed_certificate<class_Crypto_method_generate_self_signed_certificate>`.Alternatively, OpenSSL has some documentation about `generating keys<https://raw.githubusercontent.com/openssl/openssl/master/doc/HOWTO/keys.txt>`__and `certificates <https://raw.githubusercontent.com/openssl/openssl/master/doc/HOWTO/certificates.txt>`__.
 |