The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何透過批次檔批次將 PFX 憑證的私密金鑰匯出並重新打包新的 PFX 檔案

今天有客戶希望我們重新提供給他們一次 PFX 憑證檔案,所以我寫了一支批次檔專門用來匯出先前的 PFX 金鑰,並且再重新將 TWCA 簽發的 server.cer 憑證搭配原始金鑰再匯出一份新的 PFX 金鑰與設定強式密碼給他們。這篇文章我就來分享今天撰寫的腳本。

Image

批次檔程式碼分享

以下兩個命令只要設定好密碼後,就可以一次執行到底,不用人工介入輸入密碼:

  1. 快速取得 PFX 金鑰檔中的私密金鑰

    @ECHO OFF
    
    if not exist "TEMP" mkdir "TEMP"
    cd TEMP
    
    COPY ..\example.com.pfx .
    
    REM 設定 PFX 的匯出密碼
    set PFX_PASS=VeryStrongPassword
    
    REM 將 example.com.pfx 解出 example.com-key.pem 這把私密金鑰
    openssl pkcs12 -in example.com.pfx -nocerts -out example.com-key.pem -nodes -passin env:PFX_PASS
    
    set PFX_PASS=
    
  2. 快速將私密金鑰與憑證合併成新的 PFX 金鑰檔

    @ECHO OFF
    
    if not exist "TEMP" mkdir "TEMP"
    cd TEMP
    
    REM https://delinea.com/resources/password-generator-it-tool
    set PFX_PASS=VeryStrongPassword
    
    if exist "example.com.pfx" del /f /q "example.com.pfx"
    if exist "example.com.cer" del /f /q "example.com.cer"
    
    REM 解壓縮 TWCA 提供給我們的壓縮檔(僅含伺服器憑證、中繼憑證、根憑證,不含私密金鑰)
    unzip -o ..\example.com-cert.zip
    
    REM TWCA 提供的金鑰檔案一律為 server.cer
    REN server.cer example.com.cer
    
    REM 匯出新的 PFX 金鑰檔
    openssl pkcs12 -export -inkey example.com-key.pem -in example.com.cer -out example.com.pfx -passout env:PFX_PASS
    
    REM 輸出一個包含 PFX 憑證匯出密碼的文字檔 (透過 powershell 是為了不要輸出斷行字元)
    powershell -NoProfile -Command "Set-Content -LiteralPath '憑證密碼.txt' -Value $env:PFX_PASS -NoNewline"
    
    
    REM 設定一組 7-zip 壓縮檔案時的「解壓密碼」
    set ZIP_PASS=AnotherVeryStrongPassword
    
    7z a -tzip "example.com-pfx-with-pw.zip" *.pfx *.txt -r -p%ZIP_PASS% -y
    
    set PFX_PASS=
    set ZIP_PASS=
    

然後,分別用不同的管道將「壓縮檔」與「解壓密碼」傳遞給客戶,避免郵件攔截攻擊:

  1. 僅包含強式加密的「壓縮檔」,內含 PFX 憑證與匯出密碼
  2. 僅包含強式加密的壓縮檔的「解壓密碼」

為什麼要分別寄出兩封分開的郵件給客戶?

我經常會看到銀行業客戶在寄送機密郵件時,會刻意的拆成兩封郵件寄出,一封是郵件本身並且包含一份加密的附件,另一封則是開啟的密碼,這兩封郵件經常是一起寄送的,我第一次看到時還會覺得有點奇怪,這樣真的有比較安全嗎?😅

其實,加密壓縮檔解壓縮密碼經常分兩封郵件送出,主要是基於資安考量,希望避免單一郵件被攔截後,攻擊者能夠同時取得壓縮檔與密碼。雖然這兩封郵件多半會寄給同一個收件人,但分開寄送是嘗試降低因單一管道漏洩所帶來的安全風險。

不過,如果兩封郵件都透過相同的電子郵件系統或路徑送出,一旦該郵件帳號或伺服器被入侵,攻擊者仍可能同時獲得壓縮檔和密碼,因此此作法並非絕對安全,而是提升了攻擊者的攔截難度。更安全的做法是利用第二管道 (例如電話、簡訊或即時通訊工具) 傳送密碼,或採用更完善的加密和傳輸管道保護!👍

留言評論