2026-01-08

Deploy Java Deployment Rule Set (Eneterprise White List)

由於 PLM 版本太舊,其中的 Java 程式憑證過期,使用者使用時會彈出警告視窗
所以需要設定企業白名單,而白名單需要進行數位簽章,所以還要有憑證架構

jdk1.8.0_202 Download
https://master.dl.sourceforge.net/project/msi-installers/msi-archive-files/Java/v8u31/jre-8u31-windows-i586.exe

先產生 ruleset.xml
<?xml version="1.0" encoding="UTF-8"?>
<ruleset version="1.0+">
  <rule>
    <id location="https://plmap.contoso.com.tw/"/>
    <action permission="run"/>
  </rule>

  <rule>
    <id location="https://plmifs.contoso.com.tw:8080/"/>
    <action permission="run"/>
  </rule>

  <rule>
    <id/>
    <action permission="default"/>
  </rule>
</ruleset>

rem 用 Java Deployment Rule Set(企業白名單)的方式將 ruleset.xml 打包為 DeploymentRuleSet.jar 備用(檔名是硬規定)
rem 必須切換至 ruleset.xml 所在路徑執行,否則 DeploymentRuleSet.jar 中的 ruleset.xml 會有路徑,ruleset.xml 必須在 jar 的根
cd "C:\JDRS\"
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\jar.exe" ^
    cf "DeploymentRuleSet.jar" ^
    "ruleset.xml"

rem 檢查
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\jar.exe" ^
    tf DeploymentRuleSet.jar

rem 先產生 keypair(含正確用途)
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\keytool.exe" ^
    -genkeypair ^
    -alias "Contoso JAR Code Signing" ^
    -keyalg RSA ^
    -keysize 2048 ^
    -sigalg SHA256withRSA ^
    -validity 3650 ^
    -storetype PKCS12 ^
    -keystore "C:\JDRS\Contoso JAR Code Signing.p12" ^
    -storepass P@##w0rd ^
    -keypass P@##w0rd ^
    -dname "CN=Contoso JAR Code Signing, OU=IT, O=Contoso, L=Hsinchu, C=TW" ^
    -ext KeyUsage=digitalSignature ^
    -ext EKU=codeSigning

rem 確認 keystore 內容有正確 KeyUsage / EKU
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\keytool.exe" ^
    -list -v ^
    -storetype PKCS12 ^
    -keystore "C:\JDRS\Contoso JAR Code Signing.p12" ^
    -storepass P@##w0rd ^
    -alias "Contoso JAR Code Signing"


rem 產生 CSR(給 CA 簽)
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\keytool.exe" ^
    -certreq -alias "Contoso JAR Code Signing" ^
    -keystore "C:\JDRS\Contoso JAR Code Signing.p12" ^
    -storetype PKCS12 ^
    -storepass P@##w0rd ^
    -file "C:\JDRS\Contoso JAR Code Signing.csr" ^
    -sigalg SHA256withRSA

rem 先匯入 CA 鏈 Root(順序很重要)(ContosoRootCA 自取名稱)
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\keytool.exe" ^
    -importcert ^
    -trustcacerts ^
    -noprompt ^
    -alias "ContosoRootCA" ^
    -file "ContosoRootCA_ContosoRootCA 2025.crt" ^
    -keystore "C:\JDRS\Contoso JAR Code Signing.p12" ^
    -storetype PKCS12 ^
    -storepass P@##w0rd

rem 再匯入 CA 鏈 Intermediate(順序很重要)(ContosoSubCA 自取名稱)
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\keytool.exe" ^
    -importcert ^
    -trustcacerts ^
    -noprompt ^
    -alias "ContosoSubCA" ^
    -file "ContosoSubCA_ContosoSubCA 2025.crt" ^
    -keystore "C:\JDRS\Contoso JAR Code Signing.p12" ^
    -storetype PKCS12 ^
    -storepass P@##w0rd

rem 確認目前 keystore 裡有哪些 alias
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\keytool.exe" ^
    -list -v ^
    -keystore "C:\JDRS\Contoso JAR Code Signing.p12" ^
    -storetype PKCS12 ^
    -storepass P@##w0rd
    
rem 確認簽發的 cer 是由哪個 CA 簽的
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\keytool.exe" ^
    -printcert ^
    -file "C:\JDRS\Contoso JAR Code Signing.cer"

rem 把 CA 簽發的 cer 匯入到「同一個 alias」
rem 這一步會把自簽那張替換成 CA 簽發的那張,並把 chain 串起來)
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\keytool.exe" ^
    -importcert ^
    -trustcacerts ^
    -noprompt ^
    -alias "Contoso JAR Code Signing" ^
    -file "C:\JDRS\Contoso JAR Code Signing.cer" ^
    -keystore "C:\JDRS\Contoso JAR Code Signing.p12" ^
    -storetype PKCS12 ^
    -storepass "P@##w0rd"

rem 確認目前 keystore
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\keytool.exe" ^
    -list -v ^
    -keystore "C:\JDRS\Contoso JAR Code Signing.p12" ^
    -storetype PKCS12 ^
    -storepass P@##w0rd ^
    -alias "Contoso JAR Code Signing"

rem 用這個 P12 來簽 DeploymentRuleSet.jar (加 Timestamp)
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\jarsigner.exe" ^
    -keystore "C:\JDRS\Contoso JAR Code Signing.p12" ^
    -storetype PKCS12 ^
    -storepass "P@##w0rd" ^
    -tsa "http://timestamp.digicert.com" ^
    "C:\JDRS\DeploymentRuleSet.jar" ^
    "Contoso JAR Code Signing"

rem Timestamp過期: 給你一句可以拿去跟資安/稽核說的話
rem 「這個 JAR 使用可信任 TSA 加上時間戳。即使未來憑證或 TSA 憑證到期,Java 會依 timestamp 判定該程式是在憑證有效期間內簽署,因此不影響既有部署與執行。」

rem 驗證簽章(確保不會再有 PKIX/KeyUsage 警告)
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\jarsigner.exe" ^
    -verify -verbose ^
    -certs "C:\JDRS\DeploymentRuleSet.jar"

rem 再驗證簽章(看到 jar verified 就對了)
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\jarsigner.exe" ^
    -verify -verbose ^
    -certs "C:\JDRS\DeploymentRuleSet.jar"

rem 放到 Client 固定路徑(檔名/位置是硬規定)檔名必須是 DeploymentRuleSet.jar(大小寫也要一致)
copy "C:\JDRS\DeploymentRuleSet.jar" "C:\Windows\Sun\Java\Deployment\DeploymentRuleSet.jar"

rem 確認 JAR 內容結構
"C:\Program Files (x86)\Java\jdk1.8.0_202\bin\jar.exe" tf C:\Windows\Sun\Java\Deployment\DeploymentRuleSet.jar

沒有留言:

張貼留言