{"id":14913,"date":"2023-10-17T20:14:16","date_gmt":"2023-10-18T03:14:16","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=14913"},"modified":"2023-10-23T11:05:30","modified_gmt":"2023-10-23T18:05:30","slug":"securing-couchbase-with-tls-certificates-part-3","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/","title":{"rendered":"Securing Communication with TLS Certificates: A Definitive Guide for Couchbase Server (Part 3 of 3)"},"content":{"rendered":"<h2><span style=\"font-weight: 400;\">Understanding TLS within Couchbase Server<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">In <a href=\"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-1\/\">Part 1<\/a> and <a href=\"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-2\/\">Part 2<\/a> of this guide, we explained the history of TLS, the components involved and how it works. In this final 3rd part of the guide we combine this all together and learn how TLS works in Couchbase Server.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Couchbase Cluster Certificates<\/span><\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-14915 alignright\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/09\/image_2023-09-27_124324412-972x1024.png\" alt=\"\" width=\"466\" height=\"491\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_124324412-972x1024.png 972w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_124324412-285x300.png 285w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_124324412-768x809.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_124324412-300x316.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_124324412.png 1051w\" sizes=\"auto, (max-width: 466px) 100vw, 466px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">In Couchbase Server, a cluster certificate ties everything to one or more trusted Certificate Authorities (CAs); it does not directly handle the database encryption. Instead, it establishes a chain of trust for the per-node certificates within the cluster.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">All relying parties in Couchbase Server deployment must have the Cluster Certificate installed and trusted. Just like the previous example with the web browser having trusted root CAs, in a Couchbase deployment each Couchbase Server Node and connecting application using one of the SDKs must trust the Cluster Certificate. It is also imported into additional Couchbase Server Clusters that use the cross-datacenter replication (XDCR) feature to replicate data between the clusters securely.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In Couchbase Capella, our Database as a Service (DBaaS) offering, all clusters actually use the same certificate authority, and hence all use the same Cluster Certificate. And, starting in early 2022, all official Couchbase SDKs released since have included, by default, automatic trusting of the Capella Cluster Certificate.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Node Certificates for Network Encryption<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Node Certificates and the per-node private keys are the primary component responsible for network encryption in Couchbase Server. The Node Certificates are created by a trusted Certificate Authority (CA) and are signed by the CA\u2019s Private Key (aka the Private Key associated with the Cluster Public Key\/Cert).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Here\u2019s the creation process for a Couchbase Node Certificate.<\/span><\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">A Certificate Signing Request (CSR) is requested to the Certificate Authority with an embedded Node\u2019s Public Key.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The Node\u2019s Certificate is created, including the embedded Node Public Key and this is signed using the Cluster Private Key on the CA system itself.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The Node Certificate is then provided back to the requestor.<\/span><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14916\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/09\/image_2023-09-27_130520095-1024x551.png\" alt=\"\" width=\"900\" height=\"484\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130520095-1024x551.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130520095-300x161.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130520095-768x413.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130520095-1320x710.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130520095.png 1379w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">These certificates facilitate secure communication between Couchbase server nodes and enable encrypted connectivity with individual Couchbase server nodes from SDKs. Key points regarding node certificates include:<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\"><strong>Node-to-node encryption<\/strong>: Node certificates secure the communication channels between Couchbase server nodes, safeguarding data as it travels within the cluster.<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\"><strong>SDK connectivity<\/strong>: When SDKs connect to individual Couchbase server nodes, node certificates ensure that the communication is encrypted, maintaining data confidentiality.<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\"><strong>Admin GUI access over HTTPS<\/strong>: By utilizing the node certificate, administrators can securely access the Couchbase Server&#8217;s graphical user interface (GUI) through HTTPS.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-14917 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/09\/image_2023-09-27_130550855-1024x852.png\" alt=\"\" width=\"625\" height=\"520\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130550855-1024x852.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130550855-300x250.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130550855-768x639.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130550855-1320x1099.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130550855.png 1397w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">If we look at an example of how a SDK makes an encrypted connection to a Couchbase Server node, you\u2019ll see the various components at work. I\u2019ve intentionally left out some detail, to keep it somewhat simple.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-14918 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/09\/image_2023-09-27_130621931-1024x279.png\" alt=\"\" width=\"900\" height=\"245\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130621931-1024x279.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130621931-300x82.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130621931-768x209.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130621931-1320x359.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130621931.png 1426w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-14919 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/09\/image_2023-09-27_130648926-1024x524.png\" alt=\"\" width=\"900\" height=\"461\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130648926-1024x524.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130648926-300x154.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130648926-768x393.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130648926.png 1232w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-14920 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/09\/image_2023-09-27_130705065-1024x314.png\" alt=\"\" width=\"900\" height=\"276\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130705065-1024x314.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130705065-300x92.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130705065-768x235.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130705065-1536x471.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130705065-1320x404.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130705065.png 1547w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">The SDK will perform these steps with each Couchbase Server Node across the cluster it establishes a TLS connection with.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Example of setting up TLS in Couchbase Server<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">In this section we\u2019ll setup TLS network encryption on a 3 node Couchbase Server cluster, running version 7.2.0 on Linux hosts. There\u2019s also a 4th Linux host used as the Certificate Authority.\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Cluster Private Key + Certificate<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Login to the Certificate Authority host, this is where we\u2019ll create the cluster certificate.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This is just a Linux host that has a current version of OpenSSL installed.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">First we\u2019ll create a Couchbase template file that will be used later on for the per-node certificates.<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command (no output)<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">cat &gt; cbserver.ext &lt;&lt;EOF\r\nbasicConstraints=CA:FALSE\r\nsubjectKeyIdentifier = hash\r\nauthorityKeyIdentifier = keyid,issuer:always\r\nextendedKeyUsage=serverAuth\r\nkeyUsage = digitalSignature,keyEncipherment\r\nEOF<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">The next step will be to create the encrypted Cluster Private Key, named <em>cluster_private.key.<\/em><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Run the following command, you will be prompted for a passphrase to encrypt this key.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The private key will be PKCS8 (PKCS #8) format and encrypted with the very secure 265 bit <\/span><b>Advanced Encryption Standard<\/b><span style=\"font-weight: 400;\"> (<\/span><b>AES<\/b><span style=\"font-weight: 400;\">).<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -aes256 -out cluster_private.key<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Output<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">.................................................+++++\r\n....+++++\r\nEnter PEM pass phrase:\r\nVerifying - Enter PEM pass phrase:<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>You can validate it is an encrypted private key, by looking at the start of the file.<\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">head cluster_private.key<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Output<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">-----BEGIN ENCRYPTED PRIVATE KEY-----\r\nMIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI7V+8dCGg42oCAggA\r\nMAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAvcj4Z3cB\/j2gIudgzhRgSBIIE\r\n0HFbApMtub0oadBYkx7RHPxd4jpILoTJ2nwqYtn79r\/fCf1KwwwcWAd6vXOC0EeH\r\n0acalU4ZfMF756CafORL7mfnB7VIw2ht5ObsUpCiYu9cIh8tHK2bipIELKMKfCT3\r\nljxjOn\/AEZIqWy6RmwV375Ri3RONBT+czGIs4FXUA8TY\/ZHlOw46yYxpxPefkRLU\r\nH9bfcg8RLqPKfeAOprisHNhmoch0MuU0gS6U0Lt+KvNDWNylIQba94q36FQIE3YW\r\nOVlHkgB2\/YCx9BR\/ZnWlIK6I\/ZrN6Z4u\/n9hFY\/oYrxj4RIorvJyjeSq52XzVrPd\r\n1bTeZob\/MJomNhyeW0SYbUsRV\/40N11wzx5tkSftuP8zs9MzP36qspDq56rl3W5H\r\ngrKM7c9Dn+BLQbHz4158Wxaxz2CzTsn5IT5Q6BP27StrTGMYeHSAX32D+s313kPw<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Now we\u2019ll create the cluster certificate in the PEM x.509 format. In our case the certificate is intended to be self-signed, meaning that it will not be vouched for by any other authority. This means that it can be created directly, based on the existing private key <em>ca.key<\/em>, without assistance from a third party.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">When we create the cluster certificate, valid for 3650 days (10 years), it will have a cluster public key embedded into the certificate which is the corresponding pair of the <em>cluster_private.key<\/em> made earlier. You will need to provide the passphrase you entered earlier to now decrypt the private key for this command.<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">openssl req -new -x509 -days 3650 -sha256 -key cluster_private.key -out cluster_cert.pem -subj \"\/CN=Couchbase Root CA\"<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Output<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">Enter pass phrase for cluster_private.key:<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Now we can print out the contents of the new cert file (and also see the public key).<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">openssl x509 -text -noout -in .\/cluster_cert.pem<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Output<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">Certificate:\r\n\u00a0\u00a0\u00a0\u00a0Data:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Version: 3 (0x2)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Serial Number:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a07e:a6:19:80:11:8c:b2:12:cc:86:91:bd:9b:df:f1:2f:75:ef:50:07\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Signature Algorithm: sha256WithRSAEncryption\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Issuer: CN = Couchbase Root CA\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Validity\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Not Before: Jul 26 12:26:06 2023 GMT\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Not After : Jul 23 12:26:06 2033 GMT\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Subject: CN = Couchbase Root CA\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Subject Public Key Info:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Public Key Algorithm: rsaEncryption\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0RSA Public-Key: (2048 bit)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Modulus:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a000:a6:51:f9:d5:6f:40:06:b3:b5:5b:55:b5:a0:82:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a02a:73:7a:0d:a8:02:1f:82:24:ed:c7:99:51:0a:d9:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0f8:09:08:0e:24:e0:34:fe:ef:0f:53:dd:27:19:af:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0a1:0d:78:14:03:3e:26:2e:c0:44:35:fb:c7:84:57:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ad:66:be:95:d4:53:71:8c:24:30:26:46:6e:03:b9:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0b9:e9:b1:a1:fa:f9:7f:bd:88:f8:03:3e:20:dc:3a:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a029:dd:0d:2c:a3:0b:8e:22:46:49:ca:56:dc:b7:17:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0f9:87:12:d2:df:80:b8:35:df:19:4f:0d:f4:b2:9d:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a002:9e:2c:59:e4:25:98:05:85:cd:e8:64:04:43:1f:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a079:35:fb:ae:8b:e8:cd:16:24:68:90:9f:32:d5:d3:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a05f:b0:11:82:3f:a3:7a:83:d8:e2:c5:92:a5:ef:8f:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0e2:4e:b2:8f:c1:27:04:92:3c:6d:50:88:82:5b:73:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0e8:17:7b:03:c7:f3:98:71:dd:99:ed:84:f9:37:3a:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a067:79:d3:fa:6a:a4:2e:69:25:a1:2c:79:39:40:e5:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a051:2c:57:02:be:c0:d6:43:7f:d5:ce:c9:cb:ee:68:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0a6:ad:13:17:22:d1:16:8b:08:17:ba:25:80:ce:9a:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0e8:a5:fc:e9:93:47:c5:a4:70:95:eb:3b:80:39:e7:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a094:af\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exponent: 65537 (0x10001)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0X509v3 extensions:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0X509v3 Subject Key Identifier:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a018:D1:3E:58:0C:99:3D:6D:D4:EB:1A:D5:2F:43:69:89:8C:C0:A3:87\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0X509v3 Authority Key Identifier:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0keyid:18:D1:3E:58:0C:99:3D:6D:D4:EB:1A:D5:2F:43:69:89:8C:C0:A3:87\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0X509v3 Basic Constraints: critical\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CA:TRUE\r\n\u00a0\u00a0\u00a0\u00a0Signature Algorithm: sha256WithRSAEncryption\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a03f:af:bb:c9:b9:89:82:78:fe:99:e6:49:fe:7b:8d:c4:67:f4:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a062:ff:f7:6d:46:9f:75:17:9e:56:8c:c4:06:71:95:a1:6c:cd:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0d6:ae:06:dd:3f:28:ce:3b:ea:bb:1b:4b:21:26:6b:85:48:5b:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a043:c8:9c:10:ac:3d:4c:e2:62:69:8d:45:9a:5d:f0:d5:14:b7:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a021:9e:00:9a:53:50:22:42:c7:1f:ad:80:68:dd:f3:69:89:9d:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a068:3e:37:62:69:c1:28:62:5a:08:91:98:96:49:64:8b:cc:01:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a04c:7a:cf:c3:ff:cf:04:86:85:fb:2b:cf:ed:89:6c:15:ba:f7:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a08f:03:cb:af:50:f7:10:35:93:3d:29:09:bf:a5:e3:0b:d2:18:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0a2:7b:84:db:40:8a:b7:42:82:1b:ac:c8:8c:f0:d7:4f:45:de:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0b8:76:80:04:66:9b:3f:ed:e9:23:d5:52:51:9a:f8:cc:ad:1a:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a067:8f:a9:d7:45:3f:2a:07:89:5c:7b:fa:b5:73:f5:b0:4d:8d:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0d2:32:66:20:18:30:2e:d1:3e:cb:02:b3:4b:26:6e:25:20:83:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0f6:5b:a9:e8:fd:e2:d5:90:bc:16:65:6d:f9:de:9c:c0:e4:07:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a000:cb:e9:4b:9c:b4:fa:4c:79:c3:2f:3a:e7:e8:43:75:fc:b7:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a051:a5:16:ce<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Now we have the Cluster Certificate (<em>cluster_cert.pem<\/em>), this file needs to be copied to every Couchbase Server Node in the cluster. It also needs to be added to every application where the SDKs operate from as well as any hosts where admins access the UI such as an administrator\u2019s laptop. It\u2019s not a sensitive file and only contains public information.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Node Private Key + CSR<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">The steps in this section will need to be repeated for each Couchbase Server Node:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><span style=\"font-weight: 400;\">Login to the Couchbase Server Node.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Run the following commands in a temporary directory, inaccessible to other users on the system.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">First let&#8217;s create node1\u2019s, node private key, in a PKCS1 (PKCS #1) format\u00a0<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out cbnode1_private.key<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Output<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">...................................................................................+++++\r\n....+++++<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Next let\u2019s create the Certificate Signing Request (CSR) for Node1, using the <em>node1<\/em> private key. Remembering that a public key will be embedded in the CSR.\u00a0<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command (No output)<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">openssl req -new -key cbnode1_private.key -out cbnode1.csr -subj \"\/CN=Couchbase Server\"<\/pre>\n<p><span style=\"background-color: #ffffff; font-size: 19px;\">This CSR and its embedded public key can now be viewed and verified.<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<tbody>\n<tr>\n<td><strong>Command<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">openssl req -text -noout -verify -in .\/cbnode1.csr<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Output<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">verify OK\r\nCertificate Request:\r\n\u00a0\u00a0\u00a0\u00a0Data:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Version: 1 (0x0)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Subject: CN = Couchbase Server\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Subject Public Key Info:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Public Key Algorithm: rsaEncryption\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0RSA Public-Key: (2048 bit)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Modulus:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a000:c6:a3:bd:7e:84:eb:8b:00:47:74:61:f6:68:3f:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0d7:65:e8:90:7b:cd:ee:47:dd:d0:c4:26:5e:52:10:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a08c:9e:55:68:dc:c7:01:06:f5:27:82:9a:40:2d:0a:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a02a:a0:ef:d1:9d:ba:ee:cd:cc:1c:3b:b0:52:ab:bd:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a003:98:eb:70:9c:53:02:8f:93:05:d9:79:3b:ee:ad:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a086:dc:49:e2:8d:88:70:d4:80:ad:16:f2:ca:9e:20:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a082:5c:52:51:7a:6b:e5:82:85:a9:d3:55:4b:61:70:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a046:34:30:2c:72:8a:49:3f:a5:2e:59:37:58:49:45:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ca:63:99:61:c5:14:ff:9b:83:86:45:37:95:54:46:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a066:68:f3:cc:55:ac:2e:49:17:7d:f8:2f:4d:df:ea:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0f5:76:f5:b6:72:d6:93:ad:73:6c:64:da:6a:30:5c:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a08b:c0:d8:94:df:fc:4e:e8:ad:8c:34:40:e9:87:93:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a099:97:ed:3b:b5:e8:85:19:29:3c:20:d6:3a:0a:46:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a06e:b4:c3:4b:ca:80:82:05:2b:59:62:6b:99:c9:93:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a05f:11:f5:96:e1:1c:8c:c3:cd:3c:60:31:0b:40:fc:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0a6:2f:fc:40:15:71:d7:e5:c6:b0:5c:3c:4b:64:4e:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a03d:b7:48:e9:59:31:6d:b3:1e:9f:07:9b:5a:bc:bb:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0cd:df\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Exponent: 65537 (0x10001)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Attributes:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0a0:00\r\n\u00a0\u00a0\u00a0\u00a0Signature Algorithm: sha256WithRSAEncryption\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a05d:70:22:cd:a9:1b:dc:97:d3:1f:49:e7:d5:ef:4c:c9:f8:5b:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a08e:65:b3:a1:ac:b4:19:cb:ff:3a:39:bc:b8:d2:21:a9:ac:2d:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0b3:78:83:fa:26:8d:b3:26:20:83:12:a6:fd:93:23:dc:4f:ee:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a059:2f:64:bd:03:03:51:92:28:e5:55:7d:63:a4:4a:48:80:05:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a001:90:5b:ac:8d:37:d0:7a:80:a5:49:5b:63:b0:44:fd:5d:aa:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fc:9e:1c:16:78:2b:79:bb:a9:a3:a4:f8:8d:02:db:27:e0:40:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a095:61:fd:2f:f5:e2:67:f5:19:4c:75:77:38:28:ab:c5:70:06:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0c0:14:7c:82:e1:6a:cd:72:bb:f1:98:a5:79:1e:81:94:ca:3d:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a074:62:ef:48:85:d6:79:c9:26:0c:39:a8:50:7a:f0:40:1c:b4:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a05a:c6:2b:06:11:c8:63:7e:a8:0f:0b:0f:92:e3:35:6d:ab:44:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a037:08:b8:7e:4b:4e:f0:14:12:5c:f0:b3:c3:a5:c0:bd:72:dd:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a02e:43:ff:0b:7d:12:f9:46:40:87:16:06:14:00:d6:c4:1f:ae:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0d8:94:ff:cf:06:dc:72:20:ef:8f:5a:b2:0b:a6:cf:69:87:48:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a033:ac:b3:06:a2:5b:d0:16:9f:a0:3b:1d:dc:89:2a:0b:fa:1f:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fa:3c:22:ed<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Now copy the CSR file, <\/span><em>cbnode1.csr<\/em><span style=\"font-weight: 400;\">, over to the CA system. It only contains public information and is not sensitive.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Create Node Certificates<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Login to the CA system, you should now have CSR files for each Couchbase Server Node in the cluster located on the CA system, <\/span><em>cbnode1.csr<\/em><span style=\"font-weight: 400;\">, <\/span><em>cbnode2.csr,<\/em><span style=\"font-weight: 400;\"> etc.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For each Couchbase Server Node, you will need to create a template file. The template file created earlier, <em>cbserver.ext<\/em>, will be customized to each node. Run this command for each Couchbase Server Node, replacing the DNS hostname of the Couchbase Server Node and filename as needed. This will set the Subject Alternative Name (SAN) to match the name of the Couchbase Server Node.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If using hostnames for Couchbase Server, run this command:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command (no output)<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">cp cbserver.ext cbnode1.ext &amp;&amp; echo \"subjectAltName = DNS:node1.cb.acme.com\" &gt;&gt; cbnode1.ext<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Alternatively if using IP addresses without hostnames for Couchbase Server, run this:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command (no output)<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">cp cbserver.ext cbnode1.ext &amp;&amp; echo \"subjectAltName = IP:172.17.0.2\" &gt;&gt; cbnode1.ext<\/pre>\n<p><span style=\"background-color: #ffffff; font-size: 19px;\">Now you should have template files for each Couchbase Server Node in the cluster, <em>cbnode1.ext, cbnode2.ext, cbnode3.ext,<\/em> etc..<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">We will now generate the certificates, valid for 3 months, for each Couchbase Server Node. These will be in a PEM x.509 format. Run this command for each node, changing the filenames. Each time this is run, you will be prompted for your CA passphrase used to encrypt the <em>cluster_private.key<\/em> earlier.<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">openssl x509 -CA cluster_cert.pem -CAkey cluster_private.key -CAcreateserial -days 90 -req -in cbnode1.csr -out node1_cert.pem -extfile cbnode1.ext<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Output<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">Signature ok\r\nsubject=CN = Couchbase Server\r\nGetting CA Private Key\r\nEnter pass phrase for cluster_private.key:<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Copy each certificate file off the Certificate Authority to each Couchbase Server Node they belong to. For example, copy <\/span><em>node1_cert.pem<\/em><span style=\"font-weight: 400;\"> on to Couchbase Server Node 1 and <\/span><em>node2_cert.pem<\/em><span style=\"font-weight: 400;\"> on to Couchbase Server Node 2.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Load the certificates into Couchbase Server<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">These steps will need to be performed on each Couchbase Server Node<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Login to the Couchbase Server Node, you should have a folder that has 3 files.\u00a0<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Cluster Certificate, <\/span><b>cluster_cert.pem<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Node\u2019s (Public) Certificate, <\/span><b>node1_cert.pem<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Node\u2019s Private Key, <\/span><b>cbnode1_private.key<\/b><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">You no longer need the CSR file created earlier.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Now you need to move the files into the correct location, with the correct naming convention for Couchbase Server. Note that the same destination filename is used on each Couchbase Server Node, but each node has unique files for the <em>chain.pem<\/em> and <em>pkey.key<\/em>.<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">mkdir \/opt\/couchbase\/var\/lib\/couchbase\/inbox\r\nmkdir \/opt\/couchbase\/var\/lib\/couchbase\/inbox\/CA\r\nmv cluster_cert.pem \/opt\/couchbase\/var\/lib\/couchbase\/inbox\/CA\/ca.pem\r\nmv node1_cert.pem \/opt\/couchbase\/var\/lib\/couchbase\/inbox\/chain.pem\r\nmv cbnode1_private.key \/opt\/couchbase\/var\/lib\/couchbase\/inbox\/pkey.key\r\nchown couchbase:couchbase \/opt\/couchbase\/var\/lib\/couchbase\/inbox\/pkey.key<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Now all the correct files are ready to be imported to the Couchbase Server configuration.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Start by loading in the Cluster Certificate:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">curl -X POST https:\/\/localhost:8091\/node\/controller\/loadTrustedCAs -u Administrator:password<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Output<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">[{\"id\":1,\"loadTimestamp\":\"2023-07-26T15:51:33.000Z\",\"subject\":\"CN=Couchbase Root CA\",\"notBefore\":\"2023-07-26T12:26:06.000Z\",\"notAfter\":\"2033-07-23T12:26:06.000Z\",\"type\":\"uploaded\",\"pem\":\"-----BEGIN CERTIFICATE-----\\nMIIDGTCCAgGgAwIBAgIUfqYZgBGMshLMhpG9m9\/xL3XvUAcwDQYJKoZIhvcNAQEL\\nBQAwHDEaMBgGA1UEAwwRQ291Y2hiYXNlIFJvb3QgQ0EwHhcNMjMwNzI2MTIyNjA2\\nWhcNMzMwNzIzMTIyNjA2WjAcMRowGAYDVQQDDBFDb3VjaGJhc2UgUm9vdCBDQTCC\\nASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKZR+dVvQAaztVtVtaCCKnN6\\nDagCH4Ik7ceZUQrZ+AkIDiTgNP7vD1PdJxmvoQ14FAM+Ji7ARDX7x4RXrWa+ldRT\\ncYwkMCZGbgO5uemxofr5f72I+AM+INw6Kd0NLKMLjiJGScpW3LcX+YcS0t+AuDXf\\nGU8N9LKdAp4sWeQlmAWFzehkBEMfeTX7rovozRYkaJCfMtXTX7ARgj+jeoPY4sWS\\npe+P4k6yj8EnBJI8bVCIgltz6Bd7A8fzmHHdme2E+Tc6Z3nT+mqkLmkloSx5OUDl\\nUSxXAr7A1kN\/1c7Jy+5opq0TFyLRFosIF7olgM6a6KX86ZNHxaRwles7gDnnlK8C\\nAwEAAaNTMFEwHQYDVR0OBBYEFBjRPlgMmT1t1Osa1S9DaYmMwKOHMB8GA1UdIwQY\\nMBaAFBjRPlgMmT1t1Osa1S9DaYmMwKOHMA8GA1UdEwEB\/wQFMAMBAf8wDQYJKoZI\\nhvcNAQELBQADggEBAD+vu8m5iYJ4\/pnmSf57jcRn9GL\/921Gn3UXnlaMxAZxlaFs\\nzdauBt0\/KM476rsbSyEma4VIW0PInBCsPUziYmmNRZpd8NUUtyGeAJpTUCJCxx+t\\ngGjd82mJnWg+N2JpwShiWgiRmJZJZIvMAUx6z8P\/zwSGhfsrz+2JbBW6948Dy69Q\\n9xA1kz0pCb+l4wvSGKJ7hNtAirdCghusyIzw109F3rh2gARmmz\/t6SPVUlGa+Myt\\nGmePqddFPyoHiVx7+rVz9bBNjdIyZiAYMC7RPssCs0smbiUgg\/Zbqej94tWQvBZl\\nbfnenMDkBwDL6UuctPpMecMvOufoQ3X8t1GlFs4=\\n-----END CERTIFICATE-----\\n\\n\",\"loadHost\":\"127.0.0.1\",\"loadFile\":\"\/opt\/couchbase\/va<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Next load in the Node Certificate and Private Key, and note that no warnings are printed:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Command<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">curl -X POST https:\/\/localhost:8091\/node\/controller\/reloadCertificate -u Administrator:password<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Output<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">{\"warnings\":[]}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14921\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/09\/image_2023-09-27_130752861-1024x709.png\" alt=\"\" width=\"900\" height=\"623\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130752861-1024x709.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130752861-300x208.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130752861-768x531.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130752861-1320x913.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_130752861.png 1399w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">You can now use TLS connections to your Couchbase Server Cluster.\u00a0<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Trusting the Cluster Certificate<\/span><\/h2>\n<h3><span style=\"font-weight: 400;\">Admin laptop<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Login to an administrator\u2019s laptop. In this case I\u2019m using a Mac, similar steps can be performed for Windows and Linux machines.\u00a0<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">Command on MacOS (no output)<\/span><\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"nums:false lang:default decode:true\">sudo security add-trusted-cert -d -r trustRoot -k \"\/Library\/Keychains\/System.keychain\" \"\/tmp\/cluster_cert.pem\"<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><span style=\"font-weight: 400;\">Application SDK<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">We will use a Java application to connect to Couchbase Server, in this example we\u2019ll point the application to the Cluster Certificate. Another option would be to use the JVM\u2019s cacerts trust store, as the SDK will automatically trust any CAs defined there. Each programming language will have its own preferred way of trusting a CA certificate.\u00a0<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true\">String connectionString = \"couchbases:\/\/example.com\" +\r\n\u00a0\u00a0\u00a0\u00a0\"?security.trustCertificate=\/path\/to\/cluster_cert.pem\";\r\nCluster cluster = Cluster.connect(connectionString, username, password);<\/pre>\n<p><span style=\"font-weight: 400;\">Loading up the default encrypted UI address for one of your node\u2019s hostname from an administrator laptop. This should load up without any warnings: <\/span><a href=\"https:\/\/node1.cb.acme.com:18091\/\"><span style=\"font-weight: 400;\">https:\/\/node1.cb.acme.com:18091\/<\/span><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Likewise, you can make TLS encrypted connections from your application to the database.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Remember to create and deploy new per-node keys\/certs before the 90 day expiration by following these steps again.\u00a0<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Advanced TLS Topics<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">While the steps provided so far will suit most applications, there\u2019s a few additional capabilities that are offered in Couchbase Server for more complex requirements. These are covered in the blog <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/enterprise-security-enhancements-couchbase-71\/\"><span style=\"font-weight: 400;\">Encrypted Private Keys &amp; Multi-CA, Enterprise Security Enhancements In Couchbase Server 7.1<\/span><\/a><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Multiple Certificate Authorities in Couchbase Server<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Instead of including a single certificate as the Cluster Certificate (<em>cluster_cert.pem<\/em> \/ <em>ca.pem<\/em>), multiple certificates can be concatenated together into the file. This is a great option to have redundant Certificate Authorities or to perform migration from one Certificate Authority to another without any downtime.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Encrypted Node Private Keys<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Just like we performed on the cluster private key, the private key (<em>pkey.key<\/em>) that resides on each Couchbase Server Node can also optionally be encrypted with passphrase so that it is only readable by people and systems that have the correct authority to do so.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Conclusion<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">TLS certificates and their proper configuration are fundamental to establishing secure communications in Couchbase Server. Understanding the role of cluster certificates, the significance of node certificates, and the involvement of Certificate Authorities (CAs) empowers administrators to implement robust security measures. Furthermore, familiarizing oneself with Subject Alternative Names (SAN) enhances flexibility in certificate deployment across multiple domains or subdomains. By following the guidelines presented in this guide, administrators can fortify the security of their Couchbase deployments and safeguard sensitive data from unauthorized access.<\/span><\/p>\n<p>Thank you for following along with this series, we hope you enjoyed the guided tour.<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-1\/\">Part 1 &#8211; The components of TLS<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-2\/\">Part 2- Component interaction<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/\">Part 3 &#8211; Couchbase TLS implementation<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Understanding TLS within Couchbase Server In Part 1 and Part 2 of this guide, we explained the history of TLS, the components involved and how it works. In this final 3rd part of the guide we combine this all together [&hellip;]<\/p>\n","protected":false},"author":1864,"featured_media":14914,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,2225,1816,1813,2201],"tags":[2001,9262],"ppma_author":[8928],"class_list":["post-14913","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-cloud","category-couchbase-server","category-security","category-tools-sdks","tag-certificate-authority","tag-tls-encryption"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Securing Communication with TLS Certificates: A Definitive Guide for Couchbase Server (Part 3 of 3) - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"In this section we\u2019ll setup TLS network encryption on a 3 node Couchbase Server cluster, running version 7.2.0 on Linux hosts.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Securing Communication with TLS Certificates: A Definitive Guide for Couchbase Server (Part 3 of 3)\" \/>\n<meta property=\"og:description\" content=\"In this section we\u2019ll setup TLS network encryption on a 3 node Couchbase Server cluster, running version 7.2.0 on Linux hosts.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-18T03:14:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-23T18:05:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/09\/image_2023-09-27_124053342.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1396\" \/>\n\t<meta property=\"og:image:height\" content=\"701\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ian McCloy, Director Product Management\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ian McCloy, Director Product Management\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/\"},\"author\":{\"name\":\"Ian McCloy, Director Product Management, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/7e8c834bce5128ad6cd764cd1c4cea19\"},\"headline\":\"Securing Communication with TLS Certificates: A Definitive Guide for Couchbase Server (Part 3 of 3)\",\"datePublished\":\"2023-10-18T03:14:16+00:00\",\"dateModified\":\"2023-10-23T18:05:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/\"},\"wordCount\":1780,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2023\\\/09\\\/image_2023-09-27_124053342.png\",\"keywords\":[\"Certificate Authority\",\"TLS encryption\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Capella\",\"Couchbase Server\",\"Security\",\"Tools &amp; SDKs\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/\",\"name\":\"Securing Communication with TLS Certificates: A Definitive Guide for Couchbase Server (Part 3 of 3) - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2023\\\/09\\\/image_2023-09-27_124053342.png\",\"datePublished\":\"2023-10-18T03:14:16+00:00\",\"dateModified\":\"2023-10-23T18:05:30+00:00\",\"description\":\"In this section we\u2019ll setup TLS network encryption on a 3 node Couchbase Server cluster, running version 7.2.0 on Linux hosts.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2023\\\/09\\\/image_2023-09-27_124053342.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2023\\\/09\\\/image_2023-09-27_124053342.png\",\"width\":1396,\"height\":701,\"caption\":\"TLS security guide\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/securing-couchbase-with-tls-certificates-part-3\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Securing Communication with TLS Certificates: A Definitive Guide for Couchbase Server (Part 3 of 3)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/7e8c834bce5128ad6cd764cd1c4cea19\",\"name\":\"Ian McCloy, Director Product Management, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/41f65bee70b5e03e46ae996303a13060d366d405ecb235ff5493d4f1ac3a6f3d?s=96&d=mm&r=g97dd714a3242521ce9dcea0d96550c5f\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/41f65bee70b5e03e46ae996303a13060d366d405ecb235ff5493d4f1ac3a6f3d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/41f65bee70b5e03e46ae996303a13060d366d405ecb235ff5493d4f1ac3a6f3d?s=96&d=mm&r=g\",\"caption\":\"Ian McCloy, Director Product Management, Couchbase\"},\"description\":\"Ian McCloy is the Director of the Platform and Security Product Management Group for Couchbase and lives in the United Kingdom. His dedicated team is responsible for the Reliability, Availability, Serviceability and Security architecture of Couchbase Server and the SaaS Database, Capella. This team also own cloud-native platforms like the Couchbase Kubernetes Autonomous Operator. Ian has a vast range of experience as a Software Engineer, Technical Support Engineer, Quality Assurance Engineer and Systems Administrator. Ian has led global technical teams for the majority of his 20 year professional career and holds several patents in the areas of information security, virtualisation and hardware design. https:\\\/\\\/www.linkedin.com\\\/in\\\/ianmccloy\\\/\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ianmccloy\\\/\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/author\\\/ian-mccloycouchbase-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Securing Communication with TLS Certificates: A Definitive Guide for Couchbase Server (Part 3 of 3) - The Couchbase Blog","description":"In this section we\u2019ll setup TLS network encryption on a 3 node Couchbase Server cluster, running version 7.2.0 on Linux hosts.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/","og_locale":"en_US","og_type":"article","og_title":"Securing Communication with TLS Certificates: A Definitive Guide for Couchbase Server (Part 3 of 3)","og_description":"In this section we\u2019ll setup TLS network encryption on a 3 node Couchbase Server cluster, running version 7.2.0 on Linux hosts.","og_url":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/","og_site_name":"The Couchbase Blog","article_published_time":"2023-10-18T03:14:16+00:00","article_modified_time":"2023-10-23T18:05:30+00:00","og_image":[{"width":1396,"height":701,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/09\/image_2023-09-27_124053342.png","type":"image\/png"}],"author":"Ian McCloy, Director Product Management","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ian McCloy, Director Product Management","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/"},"author":{"name":"Ian McCloy, Director Product Management, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7e8c834bce5128ad6cd764cd1c4cea19"},"headline":"Securing Communication with TLS Certificates: A Definitive Guide for Couchbase Server (Part 3 of 3)","datePublished":"2023-10-18T03:14:16+00:00","dateModified":"2023-10-23T18:05:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/"},"wordCount":1780,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_124053342.png","keywords":["Certificate Authority","TLS encryption"],"articleSection":["Best Practices and Tutorials","Couchbase Capella","Couchbase Server","Security","Tools &amp; SDKs"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/","url":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/","name":"Securing Communication with TLS Certificates: A Definitive Guide for Couchbase Server (Part 3 of 3) - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_124053342.png","datePublished":"2023-10-18T03:14:16+00:00","dateModified":"2023-10-23T18:05:30+00:00","description":"In this section we\u2019ll setup TLS network encryption on a 3 node Couchbase Server cluster, running version 7.2.0 on Linux hosts.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_124053342.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2023\/09\/image_2023-09-27_124053342.png","width":1396,"height":701,"caption":"TLS security guide"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/securing-couchbase-with-tls-certificates-part-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Securing Communication with TLS Certificates: A Definitive Guide for Couchbase Server (Part 3 of 3)"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7e8c834bce5128ad6cd764cd1c4cea19","name":"Ian McCloy, Director Product Management, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/41f65bee70b5e03e46ae996303a13060d366d405ecb235ff5493d4f1ac3a6f3d?s=96&d=mm&r=g97dd714a3242521ce9dcea0d96550c5f","url":"https:\/\/secure.gravatar.com\/avatar\/41f65bee70b5e03e46ae996303a13060d366d405ecb235ff5493d4f1ac3a6f3d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/41f65bee70b5e03e46ae996303a13060d366d405ecb235ff5493d4f1ac3a6f3d?s=96&d=mm&r=g","caption":"Ian McCloy, Director Product Management, Couchbase"},"description":"Ian McCloy is the Director of the Platform and Security Product Management Group for Couchbase and lives in the United Kingdom. His dedicated team is responsible for the Reliability, Availability, Serviceability and Security architecture of Couchbase Server and the SaaS Database, Capella. This team also own cloud-native platforms like the Couchbase Kubernetes Autonomous Operator. Ian has a vast range of experience as a Software Engineer, Technical Support Engineer, Quality Assurance Engineer and Systems Administrator. Ian has led global technical teams for the majority of his 20 year professional career and holds several patents in the areas of information security, virtualisation and hardware design. https:\/\/www.linkedin.com\/in\/ianmccloy\/","sameAs":["https:\/\/www.linkedin.com\/in\/ianmccloy\/"],"url":"https:\/\/www.couchbase.com\/blog\/author\/ian-mccloycouchbase-com\/"}]}},"acf":[],"authors":[{"term_id":8928,"user_id":1864,"is_guest":0,"slug":"ian-mccloycouchbase-com","display_name":"Ian McCloy, Director Product Management","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/41f65bee70b5e03e46ae996303a13060d366d405ecb235ff5493d4f1ac3a6f3d?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/14913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/1864"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=14913"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/14913\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/14914"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=14913"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=14913"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=14913"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=14913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}