Topik ini menjelaskan konsep inti kunci publik dan kunci privat dalam enkripsi kunci asimetris serta cara kerjanya, sekaligus menunjukkan cara menggunakan antarmuka baris perintah (CLI) OpenSSL dan Keytool untuk membuat kunci privat RSA yang memenuhi persyaratan Layanan Manajemen Sertifikat Alibaba Cloud dan file Permintaan Penandatanganan Sertifikat (CSR) guna diajukan dalam permohonan sertifikat.
Definisi kunci publik dan kunci privat
Kunci publik dan kunci privat adalah pasangan kunci yang dihasilkan oleh algoritma enkripsi asimetris. Pasangan kunci ini memiliki atribut inti berikut:
Pemasangan unik
Kunci publik dan kunci privat dihasilkan sebagai pasangan yang tidak dapat dipisahkan.
Data yang dienkripsi dengan kunci publik hanya dapat didekripsi dengan kunci privat yang sesuai.
Data yang ditandatangani dengan kunci privat hanya dapat diverifikasi dengan kunci publik yang sesuai.
Tanggung jawab yang berbeda
Kunci publik: Dibagikan secara publik untuk mengenkripsi data dan memverifikasi tanda tangan.
Kunci privat: Dirahasiakan secara ketat untuk mendekripsi data dan membuat tanda tangan.
Aplikasi dalam SSL/TLS
Pertukaran kunci: Mengirimkan kunci sesi yang digunakan untuk enkripsi simetris secara aman.
Verifikasi identitas: Membuktikan bahwa server memiliki kunci privat yang sesuai dengan sertifikat.
Tanda tangan digital: Menjamin integritas data dan mengotentikasi sumbernya.
Kunci privat merupakan inti dari sistem keamanan. Jika kunci privat dikompromikan, semua komunikasi terenkripsi tidak lagi aman. Untuk informasi lebih lanjut tentang cara melindungi kunci privat, lihat Bagaimana Layanan Manajemen Sertifikat melindungi kunci privat?.
Cara kerja kunci publik, kunci privat, dan sertifikat SSL secara bersamaan
Saluran komunikasi SSL/TLS yang aman dibentuk dalam lima langkah:
Penyajian sertifikat
Server mengirimkan Sertifikat SSL-nya ke klien. Sertifikat tersebut berisi:
Kunci publik server
Informasi identitas, seperti Nama domain
Tanda tangan digital CA
Periode validitas sertifikat
Verifikasi sertifikat (di sisi klien)
Klien memeriksa apakah sertifikat dikeluarkan oleh otoritas sertifikasi (CA) tepercaya.
CatatanProses verifikasi ini bergantung pada penyimpanan sertifikat root tepercaya yang pra-instal di sistem operasi atau browser klien. Klien memverifikasi rantai sertifikat dalam urutan berikut: sertifikat server, sertifikat perantara, dan sertifikat root. Sertifikat server dipercaya jika rantainya dapat dilacak kembali ke sertifikat root tepercaya di penyimpanan lokal.
Klien memeriksa apakah sertifikat masih dalam periode validitasnya.
Klien memeriksa apakah Nama domain pada sertifikat cocok dengan titik akhir yang diakses.
Bukti kepemilikan kunci privat
Server membuktikan bahwa ia memiliki kunci privat dengan salah satu cara berikut:
Pertukaran kunci RSA: Server menggunakan kunci privatnya untuk mendekripsi pre-master secret yang dikirim oleh klien.
Pertukaran kunci DH/ECDH: Server menggunakan kunci privatnya untuk menandatangani pesan ServerKeyExchange.
TLS 1.3: Server menggunakan kunci privatnya untuk menandatangani pesan CertificateVerify.
Negosiasi kunci sesi
Kedua pihak menggunakan informasi yang dipertukarkan untuk menghasilkan kunci sesi identik guna enkripsi simetris.
Komunikasi terenkripsi
Semua data selanjutnya dienkripsi menggunakan kunci sesi untuk enkripsi simetris. Hal ini menjamin efisiensi sekaligus keamanan.
Buat kunci privat
Layanan Sertifikat SSL Alibaba Cloud mensyaratkan bahwa kunci privat memenuhi kondisi berikut:
Algoritma enkripsi: RSA
Panjang kunci: Minimal 2.048 bit
Anda dapat membuat kunci privat dengan salah satu cara berikut sesuai kebutuhan:
Jika Anda membeli sertifikat dari Layanan Manajemen Sertifikat Alibaba Cloud, atur CSR Generation ke Automatic saat membeli, membuat, atau mengajukan sertifikat. Dalam hal ini, Anda tidak perlu membuat kunci privat atau file CSR.
Hasilkan kunci privat baru
Metode ini ideal untuk sebagian besar lingkungan non-Java, seperti Nginx atau Apache, atau saat Anda perlu membuat kunci dari awal.
Dapatkan dan instal alat OpenSSL.
Ambil paket instalasi dari situs web OpenSSL.
CatatanPastikan Anda menggunakan versi OpenSSL resmi yang didukung dan stabil, seperti 1.1.1 atau 3.x. Versi lama mungkin mengandung kerentanan keamanan yang telah diketahui. Anda dapat memeriksa versi saat ini dengan menjalankan perintah
openssl versiondi terminal Anda.Hasilkan file kunci privat.
Perintah berikut membuat file kunci privat berformat PEM bernama
myprivate.pemyang menggunakan algoritma RSA dan panjang kunci tertentu. Jalankan hanya salah satu perintah berikut untuk menghasilkan kunci privat berdasarkan kebutuhan keamanan Anda.# Hasilkan kunci 2048-bit openssl genrsa -out myprivate.pem 2048 # Hasilkan kunci 4096-bit yang lebih aman openssl genrsa -out myprivate.pem 4096 # Hasilkan kunci privat yang dilindungi kata sandi (disarankan untuk skenario keamanan tinggi) openssl genrsa -aes256 -out myprivate.pem 4096
Ekstrak kunci privat dari Java Keystore (JKS) yang sudah ada
Gunakan metode ini jika Anda memiliki pasangan kunci yang disimpan dalam Java Keystore (.jks) menggunakan keytool dan perlu mengekspor kunci privat dalam format PEM. Misalnya, Anda mungkin perlu melakukan ini untuk mengonfigurasi lingkungan non-Java seperti Nginx, Apache, atau CDN. Anda dapat menggunakan salah satu metode berikut untuk mengekspor kunci.
Gunakan alat konversi format sertifikat Alibaba Cloud
Layanan Manajemen Sertifikat Alibaba Cloud menyediakan alat daring gratis untuk mengonversi keystore JKS menjadi file kunci privat dan sertifikat berformat PEM dalam satu langkah. Untuk informasi lebih lanjut, lihat Mengonversi format sertifikat.
Gunakan antarmuka baris perintah OpenSSL
Konversi format JKS ke format PKCS12.
CLI
keytooltidak dapat langsung mengekspor kunci privat ke format PEM. Namun, Anda dapat terlebih dahulu mengonversinya ke format PKCS12 (.p12) yang lebih universal. Jalankan perintah berikut. Anda akan diminta memasukkan kata sandi keystore JKS sumber dan kata sandi baru untuk file PKCS12 tujuan.# -srckeystore mydomain.jks : Menentukan nama file Java Keystore (JKS) sumber. # -destkeystore mydomain.p12 : Menentukan nama file PKCS12 tujuan yang akan dihasilkan. # -srcalias mydomain : Menentukan alias asli entri kunci privat di keystore JKS. Ganti mydomain dengan alias aktual Anda. # -destalias mydomain : Menentukan alias tujuan untuk entri kunci di file P12 baru. Biasanya sama dengan alias sumber. keytool -importkeystore -srckeystore mydomain.jks -destkeystore mydomain.p12 -deststoretype PKCS12 -srcalias mydomain -destalias mydomainEkstrak kunci privat berformat PEM dari file PKCS12.
Jika OpenSSL belum diinstal, ambil paket instalasi dari situs web OpenSSL dan instal.
CatatanPastikan Anda menggunakan versi OpenSSL resmi yang didukung dan stabil, seperti 1.1.1 atau 3.x. Versi lama mungkin mengandung kerentanan keamanan yang telah diketahui. Anda dapat memeriksa versi saat ini dengan menjalankan perintah
openssl versiondi terminal Anda.Gunakan CLI
openssluntuk mengekstrak kunci privat berformat PEM yang tidak terenkripsi dari file.p12yang dibuat pada langkah sebelumnya. Jalankan perintah berikut. Anda akan diminta memasukkan kata sandi untuk file PKCS12 yang Anda tetapkan pada langkah sebelumnya.# File myprivate.pem adalah file kunci privat akhir yang Anda butuhkan. # -nodes: Jangan mengenkripsi kunci privat keluaran. # -nocerts: Jangan keluarkan sertifikat, hanya kunci privat. # Untuk OpenSSL 3.0 dan yang lebih baru, tambahkan parameter -legacy jika Anda mengalami masalah kompatibilitas mundur. openssl pkcs12 -in mydomain.p12 -nodes -nocerts -out myprivate.pem # Jika terjadi kesalahan "unsupported algorithm" atau dekripsi gagal di OpenSSL 3.x, coba tambahkan -legacy. Catatan: Ini mengaktifkan algoritma enkripsi yang sudah tidak digunakan lagi. openssl pkcs12 -in mydomain.p12 -nodes -nocerts -out myprivate.pem -legacy
File kunci privat yang diekspor adalah file teks berkode Privacy-Enhanced Mail (PEM). Isinya biasanya direpresentasikan dalam salah satu dari dua format berikut:
Format PKCS#1
Format PKCS#1 merupakan bagian dari standar kriptografi RSA dan mendefinisikan sintaks untuk kunci publik dan kunci privat RSA. Header file kunci privat adalah -----BEGIN RSA PRIVATE KEY-----.
-----BEGIN RSA PRIVATE KEY-----
(konten kunci dalam kode Base64)
-----END RSA PRIVATE KEY-----Format PKCS#8
PKCS#8 adalah standar sintaks yang lebih umum untuk informasi kunci privat dan dapat berisi kunci privat untuk berbagai algoritma, seperti RSA dan ECC. Header file kunci privat adalah -----BEGIN PRIVATE KEY-----.
-----BEGIN PRIVATE KEY-----
(konten kunci dalam kode Base64)
-----END PRIVATE KEY-----Terlepas dari cara pembuatannya, selalu simpan file kunci privat Anda dengan aman. Jika kunci privat hilang atau dikompromikan, data apa pun yang dienkripsi dengan kunci publik yang sesuai berisiko didekripsi, dan sertifikat digital terkait menjadi tidak dapat digunakan.
Buat Permintaan Penandatanganan Sertifikat (CSR)
Untuk menggunakan kunci privat yang Anda buat sendiri saat membeli, membuat, atau mengajukan sertifikat di Layanan Manajemen Sertifikat, ikuti langkah-langkah berikut:
Buat file CSR.
Gunakan kunci privat Anda untuk membuat file Permintaan Penandatanganan Sertifikat (CSR). Jalankan perintah berikut. Perintah ini akan meminta Anda memasukkan informasi yang diperlukan, seperti negara, provinsi atau negara bagian, kota, organisasi, dan Common Name. Perintah ini menghasilkan file CSR Anda, bernama
mydomain.csr.CatatanCommon Name harus persis sama dengan Nama domain tempat Anda mengajukan sertifikat, seperti
www.aliyun.com.# -key myprivate.pem: Menentukan file kunci privat yang Anda hasilkan pada langkah sebelumnya. # -out mydomain.csr: Menentukan nama file CSR yang dihasilkan. openssl req -new -key myprivate.pem -out mydomain.csrGunakan file CSR yang dibuat pada langkah sebelumnya.
Saat membeli, membuat, atau mengajukan sertifikat, atur CSR Generation ke Manual dan tempelkan isi file CSR Anda. Untuk informasi lebih lanjut, lihat Beli sertifikat komersial, Buat sertifikat SSL, dan Ajukan permohonan ke CA.