Panduan ini berisi petunjuk untuk menyiapkan server Apache agar dapat menggunakan kunci Cloud HSM untuk penandatanganan TLS di Debian 11 (Bullseye). Anda mungkin perlu mengubah perintah ini agar berfungsi dengan distribusi OS atau Linux.
Sebelum memulai
Sebagai prasyarat, selesaikan konfigurasi yang didokumentasikan dalam Penyiapan OpenSSL.
Setelah penyiapan OpenSSL selesai, pastikan Apache versi terbaru sudah diinstal:
sudo apt-get update
sudo apt-get install apache2
Konfigurasi
Membuat kunci penandatanganan yang dihosting Cloud KMS
Buat kunci penandatanganan EC-P256-SHA256
Cloud KMS di project Google Cloud Anda, di key ring yang sebelumnya Anda konfigurasikan untuk OpenSSL:
gcloud kms keys create "KEY_NAME" --keyring "KEY_RING" \
--project "PROJECT_ID" --location "LOCATION" \
--purpose "asymmetric-signing" --default-algorithm "ec-sign-p256-sha256" \
--protection-level "hsm"
Membuat sertifikat yang ditandatangani sendiri dengan OpenSSL
Buat sertifikat yang ditandatangani sendiri dengan kunci penandatanganan yang dihosting Cloud KMS. Anda dapat menggunakan OpenSSL untuk menggunakan URI PKCS #11, bukan jalur file dan mengidentifikasi kunci berdasarkan labelnya. Di library Cloud KMS PKCS #11, label kunci adalah nama Bigtable.
openssl req -new -x509 -days 3650 -subj '/CN=CERTIFICATE_NAME/' \
DIGEST_FLAG -engine pkcs11 -keyform engine \
-key PKCS_KEY_TYPE=KEY_IDENTIFIER > PATH_TO_CERTIFICATE
Ganti kode berikut:
CERTIFICATE_NAME
: nama untuk sertifikat.DIGEST_FLAG
: algoritma ringkasan yang digunakan oleh kunci penandatanganan asimetris. Gunakan-sha256
,-sha384
, atau-sha512
bergantung pada kuncinya.PKCS_KEY_TYPE
: jenis ID yang digunakan untuk mengidentifikasi kunci. Untuk menggunakan versi kunci terbaru, gunakanpkcs11:object
dengan nama kunci. Untuk menggunakan versi kunci tertentu, gunakanpkcs11:id
dengan ID resource lengkap dari versi kunci.KEY_IDENTIFIER
: ID untuk kunci. Jika Anda menggunakanpkcs11:object
, gunakan nama kunci—misalnya,KEY_NAME
. Jika Anda menggunakanpkcs11:id
, gunakan ID resource lengkap dari kunci atau versi kunci—misalnya,projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION
.PATH_TO_CERTIFICATE
: jalur tempat Anda ingin menyimpan file sertifikat.
Jika perintah ini gagal, PKCS11_MODULE_PATH
mungkin tidak ditetapkan dengan benar, atau Anda mungkin tidak memiliki izin yang tepat untuk menggunakan kunci penandatanganan Cloud KMS.
Sekarang Anda seharusnya memiliki sertifikat yang terlihat seperti ini:
-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----
Menyiapkan server Apache
Buat direktori di
/etc/apache2
untuk menyimpan sertifikat yang ditandatangani sendiri di:sudo mkdir /etc/apache2/ssl sudo mv ca.cert /etc/apache2/ssl
Edit file konfigurasi host virtual
000-default.conf
yang terletak di/etc/apache2/sites-available
untuk memberikan jalur file sertifikat dan memastikan SSLEngine aktif.Berikut adalah contoh konfigurasi yang diproses di port 443:
<VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/apache2/ssl/ca.cert SSLCertificateKeyFile "PKCS_KEY_TYPE=KEY_IDENTIFIER" </VirtualHost>
Pastikan Apache mengekspor variabel lingkungan secara benar dengan menambahkannya ke file
/etc/apache2/envvars
menggunakan editor teks pilihan Anda. Anda mungkin perlu mengedit file sebagai root menggunakansudo
. Tambahkan baris berikut ke akhir file:export PKCS11_MODULE_PATH="<var>PATH_TO_LIBKMSP11</var>" export KMS_PKCS11_CONFIG="<var>PATH_TO_PKCS11_CONFIG</var>" export GRPC_ENABLE_FORK_SUPPORT=1
Ganti kode berikut:
PATH_TO_LIBKMSP11
: jalur kelibkmsp11.so
.PATH_TO_PKCS11_CONFIG
: jalur kepkcs11-config.yaml
.
GRPC_ENABLE_FORK_SUPPORT
diperlukan agar gRPC dapat menyertakan dukungan fork dan menjalankan library Cloud KMS PKCS #11 dengan benar sebagai bagian dari server Apache.Jika ingin mengautentikasi menggunakan kunci akun layanan, Anda juga harus mengekspor nilai untuk variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALS
.
Menjalankan server
Aktifkan modul SSL Apache, aktifkan konfigurasi virtualhost, dan tambahkan halaman web pengujian di folder DocumentRoot Anda:
sudo a2enmod ssl
sudo a2ensite 000-default.conf
echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | \
sudo tee /var/www/html/index.html
Mulai ulang server Apache Anda dan uji dengan curl
apakah konfigurasi berfungsi seperti
yang diharapkan. Tanda --insecure
diperlukan untuk mengabaikan pemeriksaan sertifikat yang ditandatangani sendiri.
sudo systemctl restart apache2
curl -v --insecure https://127.0.0.1
Jika Anda menemukan error, log error Apache adalah tempat awal yang tepat untuk
melihat apa yang salah. Masalah autentikasi adalah sumber error umum. Jika melihat error PERMISSION_DENIED
, pastikan Anda telah diautentikasi sepenuhnya dan file kredensial memiliki izin yang tepat. Untuk memastikan Anda telah diautentikasi sepenuhnya, jalankan perintah berikut:
gcloud auth application-default login
Untuk mengonfirmasi bahwa autentikasi berhasil, output harus menyertakan
baris Credentials saved to file: [/path/to/credentials.json]
.