如何申請和使用 ServBay 程式碼簽章憑證
概述
在軟體開發與發佈流程中,程式碼簽章是確保使用者信任與軟體完整性的關鍵步驟。透過對程式碼進行數位簽章,開發者能證明軟體來源,同時確保自簽章以來程式碼未經竄改。
ServBay 提供便捷功能,讓開發者可在本地環境中申請與使用由 ServBay 內部 CA 頒發的程式碼簽章憑證。這些憑證特別適用於:
- 本地開發或測試階段對軟體進行簽章,模擬實際簽章流程。
- 為內部使用的指令稿、工具或應用程式簽章,便於團隊或受信任環境中驗證軟體來源與完整性。
- 學習與實踐完整的程式碼簽章流程,無需購買昂貴的商業程式碼簽章憑證。
重要提醒: 由 ServBay 內部 CA 頒發的程式碼簽章憑證並非由公開信任的憑證機構(如 Let's Encrypt、Comodo 等)簽署。這些憑證不會被公開作業系統或瀏覽器預設信任。因此,這類憑證不適合用於需要公開信任的場景,例如發佈給最終用戶的商業軟體、應用商店提交,或必須通過作業系統安全稽核(如 macOS Gatekeeper 對未知開發者的警告)的軟體。其主要用途為本地開發、測試或受控環境下的簽章需求。
程式碼簽章憑證簡介
程式碼簽章憑證是一種數位憑證,可對執行檔、指令稿、程式庫等軟體程式碼進行數位簽章。主要功能為建立信任基礎及保障安全:
- 驗證軟體發布者身份: 憑證內含發布者資訊,數位簽章證明程式確實來自憑證所標示的開發者或組織。
- 確保程式碼完整性: 簽章過程會根據程式碼內容產生雜湊值,並以私鑰加密。驗證時,系統重新計算雜湊值並利用公鑰解密簽章檔案進行比對。若程式碼被更動,雜湊值將不符,導致簽章驗證失敗,顯示檔案已被竄改。
- 提升使用者信任: 作業系統或資安工具通常會對未簽章或來源不明的軟體發出安全警告。使用程式碼簽章憑證能消除這類警示(在受信任環境下,或當 ServBay CA 被手動加入信任鍊時),增加使用者安裝與使用信心。
- 防止惡意軟體擴散: 程式碼簽章協助使用者區分合法程式與偽裝軟體,有助抑制惡意軟體傳播。
透過 ServBay 申請程式碼簽章憑證
ServBay 使您能更簡便地在本地環境獲取程式碼簽章憑證。
打開 SSL 憑證管理面板: 在 ServBay 應用側邊欄,點擊「SSL Certificates」選單。
發起新憑證申請: 於 SSL 憑證管理頁面右上角,點擊「+」(新增)按鈕。
填寫憑證資訊: 在「Request Certificate」(請求憑證)頁面,填寫下列重點資訊:
- Common Name(通用名稱): 輸入您的組織名稱或個人姓名,例如:
ServBay, LLC
或ServBay Demo Developer
。 - Usage Purpose(用途): 選擇憑證目的,請挑選
Code Signing
(程式碼簽章)。 - Request Method(請求方法): 選擇憑證簽發方式,請選
ServBay CA
,代表使用 ServBay 內建簽署功能。 - Issuer(簽發者): 選取頒發該憑證的 ServBay 內部 CA。一般選擇
ServBay User CA
。 - Algorithm(演算法): 選擇產生金鑰對所用加密演算法。常見有
ECC
(橢圓曲線加密)或RSA
(Rivest-Shamir-Adleman)。ECC 通常有較高安全性,達同等安全強度時金鑰長度更短。 - Key Length(金鑰長度): 挑選對應演算法的金鑰長度。ECC 例:
384
;RSA 例:2048
或4096
。金鑰愈長安全性愈佳,惟處理速度略慢。 - Password(密碼): 非常重要! 請設一組強密碼保護憑證私鑰。匯出
.p12
檔案及於程式碼簽章工具時均需輸入此密碼。請務必妥善記錄,ServBay 無法協助找回遺失的私鑰密碼。建議自訂安全密碼。(註:畫面示例中的ServBay.dev
為假設密碼,請勿於實務上使用該弱密碼,請務必選擇您個人安全密碼。)
畫面範例,請依實際資訊填寫
- Common Name(通用名稱): 輸入您的組織名稱或個人姓名,例如:
送出憑證申請: 全部資訊輸入確認無誤後,點選頁面下方「Request」按鈕。ServBay 會依您指定的 ServBay User CA 自動為您簽發程式碼簽章憑證。
憑證匯出與使用
成功申請憑證後,須將其匯出成標準格式以便各種簽章工具載入。ServBay 匯出之憑證一般為 .p12
格式檔案。
進入 SSL 憑證管理面板: 在 ServBay 側邊欄點選「SSL Certificates」。
尋找您的程式碼簽章憑證: 於憑證清單中找到剛申請、用途為「Code Signing」的憑證。
點擊匯出操作: 點選該憑證項目右側的匯出圖示(通常為朝右的箭頭)。
選擇匯出目錄與設定密碼: 在彈出的匯出視窗中,選定憑證檔案儲存於本機的位置。匯出格式多為
.p12
(PKCS#12),該檔包含您的程式碼簽章憑證及對應私鑰,皆受密碼保護。請輸入申請憑證時設定之密碼方可完成匯出。於程式碼簽章工具中載入憑證: 將匯出的
.p12
檔案匯入至您的簽章工具。多種作業系統及開發環境採用不同工具:- macOS: 使用內建
codesign
命令列工具。您可能需先將.p12
檔案匯入至 macOS 鑰匙圈(Keychain Access)。 - Windows: 使用 Windows SDK 所附的
signtool.exe
命令列工具。須先將.p12
匯入至 Windows 憑證管理員。 - 其他平台/工具鏈: 依據您所使用的技術棧或建置工具(如 Java 的
jarsigner
、.NET 的SignTool
、Go 第三方簽章工具等),查找相應匯入及簽章方法。通常均需提供.p12
檔案路徑與私鑰密碼。
- macOS: 使用內建
成功匯入憑證後,您即可用該憑證為程式碼、應用程式、驅動程式等執行檔進行數位簽章。
使用程式碼簽章憑證對程式碼簽章(macOS 範例)
以下以 macOS 上使用 codesign
工具與透過 ServBay 匯出的 .p12
憑證,完成單純二進制檔案之簽章及驗證流程為例說明。
假設您已將 ServBay 匯出的 .p12
檔案匯入至 macOS 鑰匙圈並於導入時正確輸入密碼。
# 1. 建立一個簡單的 C 語言原始檔以測試簽章
# 將下列內容儲存為 test.c
cat <<EOF > test.c
#include <stdio.h>
int main() {
printf("Hello, ServBay Code Signing!\n");
return 0;
}
EOF
# 2. 使用 gcc 編譯 C 檔案產生二進制執行檔
# -o /tmp/test 指定輸出檔名為 /tmp/test
gcc test.c -o /tmp/test
echo "編譯完成,產生 /tmp/test"
# 3. 查找可用於程式碼簽章的憑證身份 (Identity)
# -v 顯示詳細資訊
# -p codesigning 僅顯示可用於程式碼簽章的憑證
# 找出您憑證的 Common Name 或其雜湊值 (如 99C183BC3796067FAFBA6F232D1C3C3425DAABDA)
security find-identity -v -p codesigning
# 輸出範例如下:
# 1) ABCDEF1234567890ABCDEF1234567890ABCDEF12 "Apple Development: Your Name (XYZ123)"
# 2) 99C183BC3796067FAFBA6F232D1C3C3425DAABDA "ServBay Demo Developer"
# 2 valid identities found
# 請記下 ServBay 憑證之哈希值或 Common Name(如 "ServBay Demo Developer")
# 4. 使用該憑證簽章二進制檔案
# -f 強制簽章(如文件已有簽章會覆蓋)
# -s 指定憑證身份,可用哈希或 Common Name
# --timestamp 加入時間戳(非強制但建議供效期驗證)
# /tmp/test 為欲簽章的檔案路徑
codesign -f -s "ServBay Demo Developer" --timestamp /tmp/test
# 或以哈希值簽章:
# codesign -f -s "99C183BC3796067FAFBA6F232D1C3C3425DAABDA" --timestamp /tmp/test
echo "/tmp/test 已完成程式碼簽章"
# 5. 驗證簽章結果
# -dvvv 顯示最完整詳細的簽章資訊
codesign -dvvv /tmp/test
# 檢查 "Authority" 欄位,應帶有您的憑證資訊和 ServBay CA 鍊
# 查閱 "Signature size"、"CDHash" 指已成功簽章
# 檢查是否包含 "Timestamp"
# 驗證範例輸出片段:
# Authority=ServBay Demo Developer
# Authority=ServBay User CA - ECC Code Signing
# Authority=ServBay Public CA - ECC Root
# Timestamp=Nov 7, 2024 at 18:26:48(範例日期)
# 6. 嘗試更改檔案內容破壞簽章
# 寫入隨機數據至檔案,將改變其雜湊值
echo "abcde" >> /tmp/test
echo "/tmp/test 檔案內容已被異動"
# 7. 再次驗證簽章
# 驗證應失敗
codesign -dvvv /tmp/test
# 輸出將出現類似於:
# /tmp/test: code object is not signed at all
# 或類似錯誤訊息,代表簽章失效,文件內容與簽章時已不符。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
說明:
security find-identity
用於列出可用於特定用途(如codesigning
)的憑證身份。請確認找到對應 ServBay 憑證的 Common Name 或哈希。codesign -f -s "Your Identity"
指令執行簽章。--timestamp
參數會額外加入可信時間戳,即便憑證有效期結束,只要簽章時憑證與時間戳都有效,該簽章仍有效。codesign -dvvv
用於完整驗證簽章,將檢查憑證效期、信任鍊與內容雜湊值。- 最後範例透過修改檔案演示程式碼簽章的核心功用:完整性驗證。任何內容更動均會導致簽章失效。
憑證續期
ServBay 頒發的程式碼簽章憑證有一定使用期限(一般為 800 天)。於到期前可於 ServBay SSL 憑證管理面板內續期。
- 進入 SSL 憑證管理面板。
- 尋找欲續期之程式碼簽章憑證。
- 點擊續期操作: 點擊憑證項目右側循環箭頭圖示。
- 確認續期: 點擊續期後,ServBay 即頒發新憑證,有效期自目前日期起算 800 天。
憑證刪除
若不再需要特定程式碼簽章憑證,可自 ServBay 刪除此憑證。
- 進入 SSL 憑證管理面板。
- 尋找欲刪除之憑證。
- 點擊刪除操作: 點擊憑證右側垃圾桶圖示。
- 確認刪除: 在彈出確認視窗裡選擇「Delete」,再度確認移除。請留意,憑證刪除後將無法還原。
常見問題 (FAQ)
Q: ServBay 頒發的程式碼簽章憑證是免費的嗎?
A: 是,透過 ServBay 內部 CA 頒發的憑證為內建功能,無需額外收費。
Q: 我能否用 ServBay 憑證為商業軟體簽章並分發給終端用戶?
A: 不可。 ServBay 憑證由內部 CA 頒發,並未被公開作業系統或應用商店預設信任。僅限於本地開發、測試或內部受控環境使用。若須發佈公開商用軟體,請購買受公開信任憑證機構之程式碼簽章憑證。
Q: 若遺忘匯出 .p12
檔案時設定的密碼,該怎麼辦?
A: ServBay 不會儲存您的私鑰密碼。若密碼遺失,將無法匯出或使用該憑證的私鑰。請刪除該憑證並重新申請程式碼簽章憑證。
Q: 我可否將 ServBay User CA 匯入至作業系統信任憑證庫?
A: 可以,您可匯出 ServBay User CA 憑證,手動加入作業系統或瀏覽器的受信任憑證庫。
總結
ServBay 所提供的程式碼簽章憑證功能,為開發者於本地環境進行軟體簽章測試和內部工具驗證提供極佳便利。經由本指南,您應已熟悉如何於 ServBay 申請、匯出及使用此類憑證的基本流程。請切記:憑證僅供開發及測試用途,勿用於需公開信任之場景。
如於申請或使用過程遇問題,建議參閱 ServBay 官方文件或尋求社群支援。