diff --git a/AGHTechDoc.md b/AGHTechDoc.md
index 54becca5..b4b7bd61 100644
--- a/AGHTechDoc.md
+++ b/AGHTechDoc.md
@@ -12,6 +12,9 @@ Contents:
* Updating
* Get version command
* Update command
+* TLS
+ * API: Get TLS configuration
+ * API: Set TLS configuration
* Device Names and Per-client Settings
* Per-client settings
* Get list of clients
@@ -515,6 +518,66 @@ Response:
200 OK
+## TLS
+
+
+### API: Get TLS configuration
+
+Request:
+
+ GET /control/tls/status
+
+Response:
+
+ 200 OK
+
+ {
+ "enabled":true,
+ "server_name":"...",
+ "port_https":443,
+ "port_dns_over_tls":853,
+ "certificate_chain":"...",
+ "private_key":"...",
+ "certificate_path":"...",
+ "private_key_path":"..."
+
+ "subject":"CN=...",
+ "issuer":"CN=...",
+ "not_before":"2019-03-19T08:23:45Z",
+ "not_after":"2029-03-16T08:23:45Z",
+ "dns_names":null,
+ "key_type":"RSA",
+ "valid_cert":true,
+ "valid_key":true,
+ "valid_chain":false,
+ "valid_pair":true,
+ "warning_validation":"Your certificate does not verify: x509: certificate signed by unknown authority"
+ }
+
+
+### API: Set TLS configuration
+
+Request:
+
+ POST /control/tls/configure
+
+ {
+ "enabled":true,
+ "server_name":"hostname",
+ "force_https":false,
+ "port_https":443,
+ "port_dns_over_tls":853,
+ "certificate_chain":"...",
+ "private_key":"...",
+ "certificate_path":"...", // if set, certificate_chain must be empty
+ "private_key_path":"..." // if set, private_key must be empty
+ }
+
+Response:
+
+ 200 OK
+
+
## Device Names and Per-client Settings
When a client requests information from DNS server, he's identified by IP address.
diff --git a/README.md b/README.md
index 3f75216c..82b8cf98 100644
--- a/README.md
+++ b/README.md
@@ -191,7 +191,7 @@ If you run into any problem or have a suggestion, head to [this page](https://gi
If you want to help with AdGuard Home translations, please learn more about translating AdGuard products here: https://kb.adguard.com/en/general/adguard-translations
-Here is a link to AdGuard Home project: https://crowdin.com/project/adguard-applications
+Here is a link to AdGuard Home project: https://crowdin.com/project/adguard-applications/en#/adguard-home
## Acknowledgments
diff --git a/client/src/__locales/en.json b/client/src/__locales/en.json
index b08147eb..b6401284 100644
--- a/client/src/__locales/en.json
+++ b/client/src/__locales/en.json
@@ -353,5 +353,11 @@
"blocked_services_global": "Use global blocked services",
"blocked_service": "Blocked service",
"block_all": "Block all",
- "unblock_all": "Unblock all"
-}
\ No newline at end of file
+ "unblock_all": "Unblock all",
+ "encryption_certificate_path": "Certificate path",
+ "encryption_private_key_path": "Private key path",
+ "encryption_certificates_source_path": "Set a certificates file path",
+ "encryption_certificates_source_content":"Paste the certificates contents",
+ "encryption_key_source_path": "Set a private key file",
+ "encryption_key_source_content": "Paste the private key contents"
+}
diff --git a/client/src/components/Settings/Encryption/CertificateStatus.js b/client/src/components/Settings/Encryption/CertificateStatus.js
new file mode 100644
index 00000000..1ecc2742
--- /dev/null
+++ b/client/src/components/Settings/Encryption/CertificateStatus.js
@@ -0,0 +1,71 @@
+import React, { Fragment } from 'react';
+import PropTypes from 'prop-types';
+import { withNamespaces, Trans } from 'react-i18next';
+import format from 'date-fns/format';
+
+import { EMPTY_DATE } from '../../../helpers/constants';
+
+const CertificateStatus = ({
+ validChain,
+ validCert,
+ subject,
+ issuer,
+ notAfter,
+ dnsNames,
+}) => (
+
+
+