GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Membuat Sertifikat yang Ditandatangani Sendiri untuk Kubernetes

Pendahuluan

Pada tahun 2020, Google Chrome mengubah perilaku SameSite=None cookie untuk meminta aktivasi Secure pilihan. Akibatnya, pengujian klien UI Web yang backend API-nya berjalan di kluster Kubernetes lokal sekarang memerlukan akses HTTPS.

Dalam tutorial ini, Anda akan mempelajari cara mendapatkan akses HTTPS dengan membuat sertifikat yang ditandatangani sendiri untuk Kubernetes menggunakan metode cert-manager, CFSSL, Easy-RSA, dan OpenSSL.

Prasyarat

  • Cluster Kubernetes (Anda dapat membuatnya menggunakan minikube)
  • alat baris perintah kubectl terpasang

Membuat Sertifikat melalui cert-manager

Sebagai pengontrol manajemen sertifikat Kubernetes asli, pengelola sertifikat add-on adalah cara paling umum untuk membuat sertifikat yang ditandatangani sendiri.

Langkah 1:Instal cert-manager

Untuk menginstal cert-manager, pertama buat namespace untuknya:

kubectl create namespace cert-manager

Selanjutnya, gunakan kubectl apply perintah dan yaml file tersedia online untuk menginstal add-on:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.13.1/cert-manager.yaml

Langkah 2:Buat Penerbit Sertifikat

Buat ruang nama di mana Anda akan membuat sertifikat:

kubectl create namespace [namespace]

Selanjutnya, tetapkan penerbit sertifikat dengan mengetikkan perintah multi-baris berikut ke terminal:

kubectl apply -n [namespace] -f <(echo "
apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
  name: [issuer-name]
spec:
  selfSigned: {}
")

Keluaran mengonfirmasi pembuatan penerbit yang berhasil:

Penerbit yang dibuat dengan cara ini hanya berfungsi untuk namespace saat ini. Jika Anda ingin dapat meminta sertifikat dari namespace mana pun dalam sebuah cluster, buat resource Kubernetes khusus yang disebut ClusterIssuer menggunakan selfsigned-issuer.yaml . yang tersedia berkas:

kubectl apply -f https://gist.githubusercontent.com/t83714/51440e2ed212991655959f45d8d037cc/raw/7b16949f95e2dd61e522e247749d77bc697fd63c/selfsigned-issuer.yaml

Langkah 3:Buat Sertifikat

Hasilkan sertifikat yang ditandatangani sendiri dengan mengetikkan perintah multi-baris berikut ke terminal:

kubectl apply -n [namespace]-f <(echo '
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
  name: [certificate-name]
spec:
  secretName: [secret-name]
  dnsNames:
  - "*.[namespace].svc.cluster.local"
  - "*.[namespace]"
  issuerRef:
    name: [issuer-name]
')

Keluaran mengonfirmasi bahwa pembuatan berhasil:

Untuk memeriksa sertifikat yang Anda buat, ketik:

kubectl -n [namespace] get certificate

Untuk melihat informasi tentang Rahasia, gunakan get secret perintah:

kubectl -n [namespace] get secret [secret-name]

Tiga kunci yang terdapat dalam rahasia ini adalah ca.crt , tls.crt , dan tls.key . Untuk seluruh Rahasia, ketik:

kubectl -n [namespace] get secret [secret-name] -o yaml

Langkah 4:Uji Sertifikat

Gunakan perintah berikut untuk menguji validitas sertifikat:

openssl x509 -in <(kubectl -n [namespace] get secret \
  first-tls -o jsonpath='{.data.tls\.crt}' | base64 -d) \
  -text -noout

X509v3 Subject Alternative Name baris harus berisi dnsNames yang Anda berikan selama pembuatan sertifikat.

Membuat Sertifikat melalui CFSSL

Alat umum lainnya untuk membuat dan memverifikasi sertifikat yang ditandatangani sendiri adalah CFSSL . Alat ini terdiri dari empat program:

  • cfssl – utilitas baris perintah untuk manajemen paket CFSSL.
  • multirootca – server otoritas sertifikat.
  • mkbundle – pembuat bundel kumpulan sertifikat.
  • cfssljson – pembuat sertifikat yang menggunakan json keluaran dari cfssl dan multirootca .

Langkah-langkah di bawah ini menunjukkan cara membuat sertifikat yang ditandatangani sendiri menggunakan CFSSL.

Langkah 1:Instal CFSSL menggunakan Go

Untuk menginstal CFSSL, pertama, Anda perlu menginstal paket bahasa Go yang diperlukan. Ketik perintah berikut:

sudo apt install golang

Kemudian, gunakan sintaks Go untuk mengunduh cfssl :

go get -u github.com/cloudflare/cfssl/cmd/cfssl

Selanjutnya, salin file dari ~/go/bin ke folder yang sesuai:

sudo cp ~/go/bin/cfssl /usr/local/bin/cfssl

Terakhir, ulangi proses dengan cfssljson :

go get -u github.com/cloudflare/cfssl/cmd/cfssljson
sudo cp ~/go/bin/cfssljson /usr/local/bin/cfssljson

Langkah 2:Buat Otoritas Sertifikat

Setelah Anda menginstal program, lanjutkan dengan membuat otoritas sertifikat yang ditandatangani sendiri (CA). Contoh di bawah ini membuat file bernama ca.json .

File mendefinisikan yang berikut:

  • CN – Nama umum untuk otoritas
  • algo – algoritma yang digunakan untuk sertifikat
  • size – ukuran algoritma dalam bit
  • C – Negara
  • L – Lokalitas (kota)
  • ST – Negara bagian atau provinsi
  • O – Organisasi
  • OU – Unit Organisasi

Contoh di bawah adalah untuk organisasi yang disebut “Contoh Perusahaan” dan unit organisasinya “Contoh Perusahaan Root CA” yang berbasis di New York, NY, Amerika Serikat.

{
  "CN": "Example Company Root CA",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
  {
    "C": "US",
    "L": "New York",
    "ST": "New York",
    "O": "Example Company",
    "OU": "Example Company Root CA"
  }
 ]
}

Buat dan simpan json file dalam editor teks. Kemudian, gunakan untuk menghasilkan ca.pem dan ca-key.pem file dengan mengetikkan cfssl berikut ini perintah:

cfssl gencert -initca ca.json | cfssljson -bare ca

Langkah 3:Buat File Konfigurasi

Untuk melanjutkan, buat cfssl.json berkas konfigurasi. File tersebut memberikan detail tentang tanggal kedaluwarsa sertifikat dan penggunaan untuk profil terpisah (peer, server, dan klien).

cfssl.json akan terlihat seperti ini:

{
  "signing": {
    "default": {
      "expiry": "8760h"
    },
    "profiles": {
      "intermediate_ca": {
        "usages": [
            "signing",
            "digital signature",
            "key encipherment",
            "cert sign",
            "crl sign",
            "server auth",
            "client auth"
        ],
        "expiry": "8760h",
        "ca_constraint": {
            "is_ca": true,
            "max_path_len": 0, 
            "max_path_len_zero": true
        }
      },
      "peer": {
        "usages": [
            "signing",
            "digital signature",
            "key encipherment", 
            "client auth",
            "server auth"
        ],
        "expiry": "8760h"
      },
      "server": {
        "usages": [
          "signing",
          "digital signing",
          "key encipherment",
          "server auth"
        ],
        "expiry": "8760h"
      },
      "client": {
        "usages": [
          "signing",
          "digital signature",
          "key encipherment", 
          "client auth"
        ],
        "expiry": "8760h"
      }
    }
  }
}

Simpan file dan keluar.

Langkah 4:Buat Otoritas Sertifikat Menengah

json lainnya file yang harus Anda buat adalah intermediate-ca.json . Ini mendefinisikan otoritas sertifikat perantara dan terlihat mirip dengan ca.json . yang dibuat sebelumnya :

{
  "CN": " Example Company Intermediate CA",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "US",
      "L": "New York",
      "ST": "New York",
      "O": "Example Company",
      "OU": "Example Company Intermediate CA"
    }
  ],
  "ca": {
    "expiry": "42720h"
  }
}

Langkah 5:Tandatangani Sertifikat

Setelah membuat kedua file, ketik perintah berikut untuk membuat intermediate_ca.pem , intermediate_ca.csr dan intermediate_ca-key.pem file, dan menandatangani CA perantara:

cfssl gencert -initca intermediate-ca.json | cfssljson -bare intermediate_ca

Kemudian, tanda tangani sertifikat menggunakan CA dan file konfigurasi cfssl.json:

cfssl sign -ca ca.pem -ca-key ca-key.pem -config cfssl.json -profile intermediate_ca intermediate_ca.csr | cfssljson -bare intermediate_ca

Langkah 6:Buat Sertifikat Host

Untuk membuat sertifikat host untuk profil rekan, server, dan klien, buat host1.json file dengan informasi yang diperlukan tentang host.

{
  "CN": "host.example-company.com",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "US",
      "L": "New York",
      "O": "Example Company",
      "OU": "Example Company Intermediate CA",
      "ST": "New York"
    }

  ],
  "hosts": [
    "host1.example-company.com",
    "localhost"
  ]
}

Sekarang, buat sertifikat menggunakan file konfigurasi yang Anda buat. Untuk sertifikat rekan yang memungkinkan komunikasi antar server, ketik:

cfssl gencert -ca intermediate_ca.pem -ca-key intermediate_ca-key.pem -config cfssl.json -profile=peer host1.json | cfssljson -bare host-1-peer

Untuk membuat sertifikat server, ketik:

cfssl gencert -ca intermediate_ca.pem -ca-key intermediate_ca-key.pem -config cfssl.json -profile=server host1.json | cfssljson -bare host-1-server

Sintaks untuk sertifikat klien, yang tidak sering diperlukan tetapi didukung oleh beberapa sistem, adalah:

cfssl gencert -ca intermediate_ca.pem -ca-key intermediate_ca-key.pem -config cfssl.json -profile=client host1.json | cfssljson -bare host-1-client

Keluaran masing-masing mengkonfirmasi keberhasilan pembuatan sertifikat.

Membuat Sertifikat melalui Easy-RSA

RSA Mudah adalah utilitas populer untuk membuat otoritas sertifikat root, meminta dan menandatangani sertifikat.

Langkah 1:Instal Easy-RSA

Untuk mengunduh paket Easy-RSA, Anda memerlukan curl. Jika Anda belum menginstal curl, instal dengan mengetik:

sudo apt install curl

Sekarang, ketik perintah curl berikut:

Curl -LO https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz

Buka paket arsip yang Anda unduh:

tar xzf easy-rsa.tar.gz

Buka easy-rsa-3.0.1/easyrsa3 direktori:

cd easy-rsa-master/easyrsa3

Setelah Anda berada di folder, ketik perintah berikut untuk menyelesaikan pengaturan Easy-RSA:

./easyrsa init-pki

Langkah 2:Buat CA yang Ditandatangani Sendiri

Untuk memulai pembuatan CA yang ditandatangani sendiri, gunakan perintah ini:

./easyrsa build-ca

Sistem meminta Anda mengetikkan frasa sandi PEM untuk mengenkripsi ca.key mengajukan. Selanjutnya, prompt mengharuskan Anda memasukkan informasi tentang CA yang Anda buat.

Langkah 3:Buat Sertifikat dan Kunci Server

Langkah selanjutnya adalah membuat sertifikat dan kunci server menggunakan perintah multi-baris yang ditunjukkan di bawah ini. --subject-alt-name opsi menyetel alamat IP dan nama DNS untuk mengakses server API.

--days opsi mengontrol panjang validitas sertifikat.

cluster.local adalah nama domain DNS default.

./easyrsa --subject-alt-name="IP:[master-IP-address]," \
"IP:[master-cluster-IP-address]," \
"DNS:kubernetes," \
"DNS:kubernetes.default," \
"DNS:kubernetes.default.svc," \
"DNS:kubernetes.default.svc.cluster," \
"DNS:kubernetes.default.svc.cluster.local" \ 
--days=10000 \
build-server-full server nopass

Sistem meminta Anda untuk mengulangi frasa sandi yang Anda buat di langkah sebelumnya. Kemudian, output mengonfirmasi bahwa database telah diperbarui dengan entri baru. Salin pki/ca.crt , pki/issued/server.crt dan pki/private/server.key file ke direktori Anda.

Membuat Sertifikat melalui OpenSSL

OpenSSL memungkinkan Anda membuat sertifikat TLS secara manual. Langkah-langkah berikut menunjukkan cara menggunakan OpenSSL untuk menghasilkan kunci dan sertifikat untuk cluster Anda.

Langkah 1:Instal OpenSSL

OpenSSL alat ini biasanya sudah diinstal sebelumnya pada sistem Linux. Periksa apakah Anda telah menginstalnya dengan mengetik:

openssl version -a

Outputnya terlihat seperti ini:

Jika Anda mendapatkan pesan yang mengatakan bahwa Anda tidak memiliki OpenSSL di sistem Anda, instal alat tersebut dengan manajer paket distribusi Anda.

Misalnya:

sudo apt install openssl

Langkah 2:Buat File Sertifikat

Gunakan perintah berikut untuk menghasilkan kunci terenkripsi RSA 2048-bit untuk penandatanganan sertifikat:

openssl genrsa -out ca.key 2048

Sekarang, gunakan ca.key untuk menghasilkan ca.crt . Gunakan -days opsi untuk mengatur panjang validitas sertifikat:

openssl req -x509 -new -nodes -key ca.key -subj "/CN=[master-ip-address]" -days [number] -out ca.crt

Jika tidak terjadi kesalahan, perintah tidak menghasilkan keluaran.

Terakhir, buat server.key file dengan enkripsi RSA 2048-bit:

openssl genrsa -out server.key 2048

Langkah 3:Buat File Konfigurasi Sertifikat

Buat csr.conf file konfigurasi untuk menghasilkan Permintaan Penandatanganan Sertifikat (CSR). Contoh file di bawah ini juga mengasumsikan bahwa Anda menggunakan cluster.local sebagai nama domain DNS default.

[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C = [country]
ST = [state]
L = [city]
O = [company]
OU = [organization-unit]
CN = [common-name]

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster
DNS.5 = kubernetes.default.svc.cluster.local
IP.1 = [MASTER_IP]
IP.2 = [MASTER_CLUSTER_IP]

[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
[email protected]_names

Pastikan Anda mengganti penjelasan dalam tanda kurung siku dengan nilai sebenarnya. Simpan file dan gunakan untuk membuat permintaan penandatanganan sertifikat:

openssl req -new -key server.key -out server.csr -config csr.conf

Perintah tidak menghasilkan keluaran, tetapi membuat server.csr berkas.

Langkah 4:Buat Sertifikat

Gunakan file yang Anda buat pada langkah sebelumnya bersama dengan ca.key dan ca.crt untuk membuat sertifikat server:

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -out server.crt -days 10000 \
-extensions v3_ext -extfile csr.conf

Output dari perintah multi-baris ini mengonfirmasi pembuatan sertifikat dan mencantumkan data Anda dari file konfigurasi:

Untuk melihat sertifikat yang Anda buat, ketik:

openssl x509 -noout -text -in ./server.crt

Ubuntu
  1. Cara menginstal sertifikat SSL yang ditandatangani sendiri di cPanel

  2. Cara menghasilkan sertifikat yang ditandatangani sendiri hash x509 SHA256 menggunakan OpenSSL

  3. Cara menghasilkan Kunci dan CSR di cPanel untuk Sertifikat SSL Anda

  1. Cara Menggunakan ConfigMaps Untuk Konfigurasi Kubernetes

  2. Cara Membuat Permintaan Penandatanganan Sertifikat (CSR) untuk SSL

  3. Cara membuat Sertifikat SSL yang Ditandatangani Sendiri di Ubuntu 18.04

  1. Cara Menginstal Sertifikat SSL di Apache untuk CentOS 7

  2. Cara Mengonfigurasi Kubernetes untuk Pembaruan Bergulir

  3. Cara Mengatur Ingress Controller NGINX di Kubernetes