Topik ini menjelaskan cara mengaktifkan HTTPS dengan mengonfigurasi Sertifikat SSL langsung di aplikasi Spring Boot.
Catatan penggunaan
Sebelum memulai, pastikan Anda telah memenuhi persyaratan berikut:
Status Sertifikat: Sertifikat SSL Anda diterbitkan oleh otoritas sertifikat (CA) tepercaya. Jika sertifikat About to Expire atau Expired, pertama-tama perpanjang Sertifikat SSL.
Pencocokan Nama Domain: Pastikan sertifikat sesuai dengan semua nama domain yang ingin diamankan. Jika tidak, pengunjung akan melihat peringatan keamanan saat mengakses nama domain yang tidak cocok melalui HTTPS. Untuk menambah atau memodifikasi domain, lihat Tambah dan Ganti Nama Domain.
Nama domain yang cocok secara tepat: Hanya berlaku untuk nama domain yang ditentukan.
example.comhanya melindungiexample.com.www.example.comhanya melindungiwww.example.com.
Nama domain wildcard: Hanya berlaku untuk subdomain tingkat pertamanya.
*.example.comberlaku untuk subdomain tingkat pertama sepertiwww.example.comdana.example.com.*.example.comtidak melindungi domain rootexample.comatau subdomain multi-level sepertia.b.example.com.
CatatanUntuk melindungi subdomain multi-level, bidang Bound Domains harus berisi domain yang tepat, seperti
a.b.example.com, atau domain wildcard yang sesuai, seperti*.b.example.com.Izin Server: Anda memerlukan akun
rootatau akun dengan hak istimewasudo.Resolusi DNS: Rekaman DNS domain dikonfigurasi dan diarahkan ke alamat IP publik server.
Ketergantungan Lingkungan: Java 8 atau versi lebih baru telah terinstal di server.
Prosedur
Langkah 1: Siapkan file sertifikat
Kunjungi halaman Manajemen Sertifikat SSL. Di kolom Actions dari sertifikat target, klik Download Certificate. Pada tab Download, unduh file sertifikat untuk JKS Server Type.
CatatanSpring Boot mendukung format JKS dan PKCS12 (.pfx). Topik ini menggunakan PKCS12 sebagai contoh. Setelah Anda mengekstrak file yang diunduh, Anda mendapatkan file sertifikat (misalnya,
domain.p12) dan file kata sandi (p12-password.txt).Unggah file sertifikat yang diekstrak (.pfx atau .jks) dan file kata sandi (.txt) ke server. Simpan mereka di direktori eksternal yang aman, seperti
/etc/ssl/myapp.PentingJangan letakkan file sertifikat atau kunci privat di direktori
src/main/resources. Ini akan mengemas kunci sensitif ke dalam deliverable aplikasi, seperti file JAR atau WAR, dan dapat dengan mudah menyebabkan kebocoran kunci.Anda dapat menggunakan fitur unggah file lokal dari alat login jarak jauh Anda, seperti PuTTY, Xshell, atau WinSCP. Jika Anda menggunakan Alibaba Cloud Elastic Compute Service (ECS), lihat Unggah atau Unduh File.
Langkah 2: Konfigurasikan aplikasi Spring Boot
Jangan hard-code informasi sensitif, seperti kata sandi sertifikat, di file konfigurasi Anda. Praktik ini menimbulkan risiko keamanan. Sebagai gantinya, gunakan variabel lingkungan atau file eksternal yang aman.
Tetapkan variabel lingkungan dengan menjalankan perintah
export.# Dapatkan kata sandi dari file kata sandi yang Anda unduh sebelumnya. export SSL_KEYSTORE_PASSWORD='your_secure_password' # Jika kata sandi kunci privat berbeda, tetapkan juga. export SSL_KEY_PASSWORD='your_key_password'Konfigurasikan file
application.propertiesatauapplication.ymlseperti yang ditunjukkan dalam contoh berikut.CatatanTopik ini menggunakan Spring Boot versi 3.4.10 sebagai contoh.
application.properties
# Dengarkan port 443 server.port=443 # --- Konfigurasi SSL --- # Jalur ke file sertifikat. Gunakan awalan 'file:' untuk menentukan jalur mutlak eksternal. server.ssl.key-store=file:/etc/myapp/ssl/keystore.p12 # Jenis KeyStore sertifikat. server.ssl.key-store-type=PKCS12 # Alias sertifikat, yang biasanya ditentukan saat menghasilkan file JKS/P12. server.ssl.key-alias=mycert # --- Konfigurasi Keamanan: Manajemen Kata Sandi --- # Baca kata sandi dari variabel lingkungan untuk menghindari hard-code di file konfigurasi. server.ssl.key-store-password=${SSL_KEYSTORE_PASSWORD} # Jika kata sandi kunci privat berbeda dari kata sandi keystore, baca dari variabel lingkungan juga. server.ssl.key-password=${SSL_KEY_PASSWORD} # --- Konfigurasi Keamanan: Protokol TLS dan paket sandi --- # Aktifkan versi protokol TLS yang aman. server.ssl.enabled-protocols=TLSv1.2,TLSv1.3 # Konfigurasikan paket sandi kuat yang direkomendasikan. server.ssl.ciphers=TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,TLS_AES_128_GCM_SHA256,ECDHE-RSA-AES256-GCM-SHA384,ECDHE-RSA-AES128-GCM-SHA256 # Aktifkan HTTP/2 untuk meningkatkan performa. server.http2.enabled=trueapplication.yml
server: port: 443 # Dengarkan port 443 ssl: # --- Konfigurasi SSL --- # Jalur ke file sertifikat. Gunakan awalan 'file:' untuk menentukan jalur mutlak eksternal. key-store: file:/etc/myapp/ssl/keystore.p12 # Jenis KeyStore sertifikat. key-store-type: PKCS12 # Alias sertifikat, yang biasanya ditentukan saat menghasilkan file JKS/P12. key-alias: mycert # --- Konfigurasi Keamanan: Manajemen Kata Sandi --- # Baca kata sandi dari variabel lingkungan untuk menghindari hard-code di file konfigurasi. key-store-password: ${SSL_KEYSTORE_PASSWORD} # Jika kata sandi kunci privat berbeda dari kata sandi keystore, baca dari variabel lingkungan juga. key-password: ${SSL_KEY_PASSWORD} # --- Konfigurasi Keamanan: Protokol TLS dan paket sandi --- # Aktifkan versi protokol TLS yang aman. enabled-protocols: TLSv1.2,TLSv1.3 # Konfigurasikan paket sandi kuat yang direkomendasikan. ciphers: - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 - TLS_AES_128_GCM_SHA256 - ECDHE-RSA-AES256-GCM-SHA384 - ECDHE-RSA-AES128-GCM-SHA256 # Aktifkan HTTP/2 untuk meningkatkan performa. http2: enabled: true
Langkah 3: Konfigurasikan sistem dan lingkungan jaringan
Langkah ini memastikan aplikasi Anda memiliki izin untuk mendengarkan port yang ditentukan dan bahwa grup keamanan serta firewall Anda mengizinkan lalu lintas eksternal mencapainya.
Jalankan perintah berikut di terminal server untuk memeriksa apakah port 443 terbuka:
RHEL/CentOS
command -v nc > /dev/null 2>&1 || sudo yum install -y nc # Ganti <your_server_public_ip> dengan alamat IP publik server Anda yang sebenarnya. sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443Jika keluarannya adalah
Ncat: Terhubung ke <Alamat IP publik server saat ini>:443, port 443 terbuka. Jika tidak, buka port 443 di grup keamanan dan firewall.Debian/Ubuntu
command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat # Ganti <your_server_public_ip> dengan alamat IP publik server Anda yang sebenarnya. sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443Jika keluarannya adalah
Koneksi ke <alamat IP publik server saat ini> port [tcp/https] berhasil!atau[<alamat IP publik server saat ini>] 443 (https) terbuka, port 443 terbuka. Jika tidak, buka port 443 di grup keamanan dan firewall.Buka port 443 di konfigurasi grup keamanan Anda.
PentingJika server Anda ditempatkan di platform cloud, pastikan grup keamanannya mengizinkan lalu lintas masuk pada port TCP 443. Jika tidak, layanan tersebut tidak akan dapat diakses. Langkah-langkah berikut menggunakan Alibaba Cloud Elastic Compute Service (ECS) sebagai contoh. Untuk platform cloud lainnya, lihat dokumentasi resmi mereka.
Kunjungi halaman Instance Elastic Compute Service, klik nama instance target untuk masuk ke halaman detail instance. Lihat Tambah Aturan Grup Keamanan untuk menambahkan aturan baru di Security Group dengan Action disetel ke Allow, Protocol Type ke Custom TCP, Destination Port Range ke HTTPS(443), dan Authorization Object ke All IPv4 Addresses.
Buka port 443 di firewall Anda.
Jalankan perintah berikut untuk mengidentifikasi layanan firewall aktif di sistem Anda:
if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then echo "firewalld" elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then echo "ufw" elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then echo "nftables" elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then echo "iptables" elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then echo "iptables" else echo "none" fiJika keluarannya adalah
none, tidak ada tindakan lebih lanjut yang diperlukan. Jika tidak, jalankan perintah yang sesuai berdasarkan keluaran (firewalld,ufw,nftables, atauiptables) untuk membuka port 443:firewalld
sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reloadufw
sudo ufw allow 443/tcpnftables
sudo nft add table inet filter 2>/dev/null sudo nft add chain inet filter input '{ type filter hook input priority 0; }' 2>/dev/null sudo nft add rule inet filter input tcp dport 443 counter accept 2>/dev/nulliptables
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPTUntuk memastikan aturan iptables bertahan setelah reboot sistem, jalankan perintah berikut:
RHEL/CentOS
sudo yum install -y iptables-services sudo service iptables saveDebian/Ubuntu
sudo apt-get install -y iptables-persistent sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null
Langkah 4: Mulai ulang aplikasi
Kunjungi direktori root proyek Spring Boot Anda. Berdasarkan alat pembangunan Anda, jalankan perintah yang sesuai untuk memulai ulang aplikasi.
Lingkungan Pengembangan/Uji (menggunakan plugin pembangunan)
Maven
mvn spring-boot:runGradle
gradle bootRun
Lingkungan Produksi (berjalan sebagai JAR mandiri)
Dalam lingkungan produksi, Anda biasanya mengemas dan menjalankan aplikasi sebagai file .jar. Anda perlu menghentikan proses lama sebelum memulai ulang aplikasi dengan perintah java -jar.
# 1. Temukan dan hentikan proses aplikasi yang sedang berjalan (PID).
# ps -ef | grep your-app-name.jar
# kill <PID>
#
# 2. Mulai ulang aplikasi. Jika Anda perlu menambahkan argumen JVM, sertakan sebelum '&'.
nohup java -jar /path/to/your-app-name.jar &Setelah memulai ulang, periksa log aplikasi untuk memastikan layanan memuat sertifikat SSL dan mulai pada port HTTPS.
Langkah 5: Verifikasi penyebaran
Akses domain Anda melalui HTTPS di browser web. Misalnya,
https://yourdomain.com. Gantiyourdomain.comdengan domain Anda yang sebenarnya.Jika ikon gembok muncul di bilah alamat browser, sertifikat berhasil diterapkan. Jika Anda mengalami kesalahan akses atau ikon gembok tidak muncul, bersihkan cache browser Anda atau coba lagi dalam mode penyamaran (privasi).

Mulai dari versi 117, ikon
di bilah alamat Chrome telah diganti dengan ikon baru
. Klik ikon ini untuk melihat informasi gembok.
Jika masalah tetap ada, lihat bagian FAQ untuk pemecahan masalah.
Mulai beroperasi
Saat menerapkan ke lingkungan produksi, ikuti praktik terbaik berikut untuk meningkatkan keamanan, stabilitas, dan kemudahan pemeliharaan:
Jalankan sebagai Pengguna Non-Administrator:
Buat pengguna sistem khusus dengan hak istimewa rendah untuk aplikasi. Jangan pernah menjalankan aplikasi dengan akun yang memiliki hak administrator.
CatatanPendekatan yang direkomendasikan adalah mengonfigurasi SSL di lapisan gateway. Ini melibatkan penerapan sertifikat pada Server Load Balancer (SLB) atau reverse proxy seperti Nginx. Gateway mengakhiri lalu lintas HTTPS dan meneruskan lalu lintas HTTP yang didekripsi ke aplikasi backend.
Eksternalisasi Manajemen Kredensial:
Jangan hard-code kata sandi atau informasi sensitif lainnya di kode atau file konfigurasi Anda. Gunakan variabel lingkungan, Vault, atau layanan manajemen kunci penyedia cloud untuk menyuntikkan kredensial.
Paksakan Pengalihan HTTP ke HTTPS:
Alihkan semua lalu lintas HTTP ke HTTPS untuk mencegah serangan man-in-the-middle.
Konfigurasikan Protokol TLS Modern:
Nonaktifkan protokol lama dan tidak aman (seperti SSLv3, TLSv1.0, dan TLSv1.1) di konfigurasi server Anda. Aktifkan hanya TLSv1.2 dan TLSv1.3.
Monitor Sertifikat dan Otomatiskan Perpanjangan:
Setelah menerapkan sertifikat, aktifkan pemantauan domain. Alibaba Cloud secara otomatis memeriksa periode validitas sertifikat dan mengirimkan pengingat perpanjangan sebelum kedaluwarsa untuk membantu Anda menghindari gangguan layanan. Untuk informasi lebih lanjut, lihat Pembelian dan Aktivasi Pemantauan Nama Domain Publik.
FAQ
Mengapa sertifikat saya tidak berfungsi atau HTTPS tidak dapat diakses setelah instalasi atau pembaruan?
Penyebab umum termasuk:
Grup keamanan atau firewall server tidak mengizinkan lalu lintas pada port 443. Lihat Konfigurasikan Sistem dan Lingkungan Jaringan.
Domain yang Anda akses tidak termasuk dalam Bound Domains Sertifikat. Lihat Pencocokan Nama Domain.
Layanan Spring Boot tidak di-restart setelah Anda memodifikasi file konfigurasi. Lihat Langkah 4: Restart Aplikasi.
File sertifikat tidak diganti dengan benar, atau jalur sertifikat tidak ditentukan dengan benar dalam konfigurasi Spring Boot. Periksa apakah file konfigurasi Spring Boot dan file sertifikat sudah yang terbaru dan valid.
Traffic domain dialihkan melalui produk cloud seperti Content Delivery Network (CDN), SLB, atau Web Application Firewall (WAF), tetapi sertifikat belum diinstal pada layanan tersebut. Lihat Lokasi Penerapan Sertifikat Ketika Traffic Melewati Beberapa Layanan Alibaba Cloud untuk menyelesaikan pengaturan.
DNS domain menyelesaikan ke beberapa server, tetapi Sertifikat hanya diinstal pada sebagian dari mereka. Instal Sertifikat pada setiap server.
Untuk pemecahan masalah lebih lanjut, lihat Selesaikan Masalah Penerapan Sertifikat Berdasarkan Pesan Kesalahan Browser dan Panduan Pemecahan Masalah Penerapan Sertifikat SSL.
Bagaimana cara memperbarui atau mengganti Sertifikat SSL di aplikasi Spring Boot?
Pertama, cadangkan file sertifikat dan kata sandi yang ada di server Anda. Kemudian, masuk ke konsol Layanan Manajemen Sertifikat, unduh file sertifikat baru, dan unggah ke server target, menimpa file lama. Pastikan jalur dan nama file tetap sama. Terakhir, mulai ulang aplikasi Spring Boot untuk menerapkan sertifikat baru.