<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SSL/TLS on weblog_Raihan</title><link>/notes/ssl_tls/</link><description>Recent content in SSL/TLS on weblog_Raihan</description><generator>Hugo</generator><language>ms-MY</language><copyright>Copyright &amp;copy; 2017-2026 &lt;a class='grey' href="/contact/"&gt;Puan Raihan&lt;/a&gt;.</copyright><lastBuildDate>Wed, 27 Aug 2025 12:37:07 +0800</lastBuildDate><atom:link href="/notes/ssl_tls/index.xml" rel="self" type="application/rss+xml"/><item><title>Penyediaan Sijil SSL dengan Keytool</title><link>/notes/ssl_tls/penyediaan-sijil-ssl-dengan-keytool-java/</link><pubDate>Wed, 27 Aug 2025 12:37:07 +0800</pubDate><guid>/notes/ssl_tls/penyediaan-sijil-ssl-dengan-keytool-java/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Buat skrip &lt;code&gt;bash&lt;/code&gt; seperti di bawah:&lt;/p&gt;
&lt;div class="card mt-n2 mb-4"&gt;&lt;div class="card-header"&gt;&lt;code&gt;/etc/hadoop/keystore/keytool_gen.sh&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;display:grid;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5f8700"&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;alias&lt;/span&gt; &lt;span style="color:#0087ff"&gt;keytool&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;/usr/lib/jvm/jdk-17.x.xx-oracle-x64/bin/keytool&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;ROOT_KEYSTORE&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;root.jks&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;CA_KEYSTORE&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;ca.jks&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;SERVER_KEYSTORE&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;server.jks&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;TRUSTSTORE&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;truststore.jks&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;PASSWORD&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;change-it&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;CITY&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;change-it&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;STATE&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;change-it&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;COUNTRY&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;MY&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# DNS and IP configurations&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;DNS1&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;single.cluster.vm&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#323232"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;IP1&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;192.168.122.74&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;#DNS2=&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;#IP2=&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# SAN extension with both DNS names and IP addresses&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;#SAN_EXTENSION=&amp;#34;dns:$DNS1,ip:$IP1,dns:$DNS2,ip:$IP2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;SAN_EXTENSION&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;&amp;#34;dns:&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$DNS1&lt;/span&gt;&lt;span style="color:#00afaf"&gt;,ip:&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$IP1&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Starting certificate generation process...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;SAN values: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$SAN_EXTENSION&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Clean up any existing files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rm *.csr *.jks *.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# 1. Generate Root CA (self-signed)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Generating Root CA...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -genkeypair -keystore &lt;span style="color:#0087ff"&gt;$ROOT_KEYSTORE&lt;/span&gt; -alias root &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -dname &lt;span style="color:#00afaf"&gt;&amp;#34;L=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$CITY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, ST=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$STATE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, C=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$COUNTRY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, O=Hadoop-Root, OU=Root, CN=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$DNS1&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -keyalg EC -groupname secp256r1 -sigalg SHA256withECDSA &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -ext bc:c -validity &lt;span style="color:#00afaf"&gt;3650&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Export Root CA certificate for client truststore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Exporting Root CA certificate...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$ROOT_KEYSTORE&lt;/span&gt; -alias root -exportcert -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; root.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# 2. Generate Intermediate CA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Generating Intermediate CA...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -genkeypair -keystore &lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt; -alias ca &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -dname &lt;span style="color:#00afaf"&gt;&amp;#34;L=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$CITY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, ST=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$STATE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, C=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$COUNTRY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, O=Hadoop-CA, OU=CA, CN=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$DNS1&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -keyalg EC -groupname secp256r1 -sigalg SHA256withECDSA &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -ext bc:c -validity &lt;span style="color:#00afaf"&gt;1825&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Send CSR to Root for signing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Creating Intermediate CA CSR...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt; -alias ca -certreq -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; ca.csr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Signing Intermediate CA certificate with Root CA...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$ROOT_KEYSTORE&lt;/span&gt; -alias root -gencert &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -ext &lt;span style="color:#0087ff"&gt;BC&lt;/span&gt;=&lt;span style="color:#00afaf"&gt;0&lt;/span&gt; -infile ca.csr -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; ca.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Import root + signed certificate back to intermediate keystore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Importing certificates to Intermediate CA keystore...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt; -importcert -alias root -file root.pem &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; -noprompt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt; -importcert -alias ca -file ca.pem &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; -noprompt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Create truststore for server/client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Creating truststore...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$TRUSTSTORE&lt;/span&gt; -importcert -alias root -file root.pem &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; -noprompt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$TRUSTSTORE&lt;/span&gt; -importcert -alias ca -file ca.pem &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; -noprompt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# 3. Generate Server Certificate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Generating Server Certificate...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -genkeypair -keystore &lt;span style="color:#0087ff"&gt;$SERVER_KEYSTORE&lt;/span&gt; -alias jetty &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -dname &lt;span style="color:#00afaf"&gt;&amp;#34;L=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$CITY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, ST=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$STATE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, C=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$COUNTRY&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, O=Hadoop-Server, OU=Server, CN=&lt;/span&gt;&lt;span style="color:#0087ff"&gt;$DNS1&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -keyalg EC -groupname secp256r1 -sigalg SHA256withECDSA &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -ext ku:c=digitalSignature,keyEncipherment -ext &lt;span style="color:#0087ff"&gt;san&lt;/span&gt;=&lt;span style="color:#0087ff"&gt;$SAN_EXTENSION&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -validity &lt;span style="color:#00afaf"&gt;730&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Send CSR to Intermediate for signing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Creating Server CSR...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$SERVER_KEYSTORE&lt;/span&gt; -alias jetty -certreq -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; server.csr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Signing Server certificate with Intermediate CA...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt; -alias ca -gencert &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -ext ku:c=digitalSignature,keyEncipherment -ext &lt;span style="color:#0087ff"&gt;san&lt;/span&gt;=&lt;span style="color:#0087ff"&gt;$SAN_EXTENSION&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -infile server.csr -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; server.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Create full certificate chain and import back to server keystore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Creating certificate chain and importing to server keystore...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat server.pem ca.pem | keytool -keystore &lt;span style="color:#0087ff"&gt;$SERVER_KEYSTORE&lt;/span&gt; &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -importcert -alias jetty -file server.pem &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; -noprompt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4e4e4e"&gt;# Export certificates from truststore to PEM format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Exporting truststore certificates to PEM format...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$TRUSTSTORE&lt;/span&gt; -exportcert -alias root -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; root-trust.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -keystore &lt;span style="color:#0087ff"&gt;$TRUSTSTORE&lt;/span&gt; -exportcert -alias ca -rfc &lt;span style="color:#af0000"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -storepass &lt;span style="color:#0087ff"&gt;$PASSWORD&lt;/span&gt; &amp;gt; ca-trust.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat root-trust.pem ca-trust.pem &amp;gt; ca-bundle.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Certificate generation completed successfully!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;Generated files:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;- Root CA: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$ROOT_KEYSTORE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, root.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;- Intermediate CA: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$CA_KEYSTORE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, ca.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;- Server Certificate: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$SERVER_KEYSTORE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, server.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;- Truststore: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$TRUSTSTORE&lt;/span&gt;&lt;span style="color:#00afaf"&gt;, ca-bundle.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0087ff"&gt;echo&lt;/span&gt; &lt;span style="color:#00afaf"&gt;&amp;#34;SAN values included: &lt;/span&gt;&lt;span style="color:#0087ff"&gt;$SAN_EXTENSION&lt;/span&gt;&lt;span style="color:#00afaf"&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cd&lt;/code&gt; ke dalam direktori i.e. &lt;code&gt;/etc/hadoop/keystore&lt;/code&gt;, jadikannya &lt;em&gt;executable&lt;/em&gt; dan jalankan skrip.&lt;/p&gt;</description></item><item><title>Jana Sijil HTTPS untuk Domain yang Berasaskan 'localhost'</title><link>/notes/ssl_tls/jana-sijil-https-domain-localhost/</link><pubDate>Mon, 28 Jul 2025 12:40:49 +0800</pubDate><guid>/notes/ssl_tls/jana-sijil-https-domain-localhost/</guid><description>&lt;p&gt;Panduan ini diadaptasi daripada &amp;ldquo;&lt;a href="https://gist.github.com/cecilemuller/9492b848eb8fe46d462abeb26656c4f8"&gt;How to create an HTTPS certificate for localhost domains&lt;/a&gt;&amp;rdquo;, bertujuan mengaktifkan sokongan &lt;code&gt;HTTPS&lt;/code&gt; pada domain yang menghala ke alamat IP &lt;code&gt;127.0.0.1&lt;/code&gt;, iaitu &lt;code&gt;localhost&lt;/code&gt;, &lt;code&gt;audio.loc&lt;/code&gt; dan &lt;code&gt;laravel.loc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Semua fail berkaitan pensijilan ini disimpan dalam satu direktori khas: &lt;code&gt;/etc/nginx/ssl&lt;/code&gt;.&lt;/p&gt;
&lt;div class="alert border-warning mb-4 fs-6"&gt;
Sila ubah nilai negara, negeri, bandar dan nama entiti dalam parameter pensijilan mengikut keperluan anda.
&lt;/div&gt;
&lt;h2 id="persediaan-direktori"&gt;Persediaan Direktori&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cipta direktori dan tukar ke dalamnya:
&lt;div class="card mt-1 mb-4"&gt;&lt;div class="card-header"&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/div&gt;
&lt;div class="salin"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#8a8a8a;background-color:#1c1c1c;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p /etc/nginx/ssl &amp;amp;&amp;amp; &lt;span style="color:#0087ff"&gt;cd&lt;/span&gt; /etc/nginx/ssl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="sijil-akar-root-ca"&gt;Sijil Akar (Root CA)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Cipta fail konfigurasi dengan entri berikut:&lt;/p&gt;</description></item></channel></rss>