在安全通信程式設計中有時我們會用到數字證書進行通信加密,那麼如何生成自己的數字證書進行測試呢?下面是使用OpenSSL在Ubuntu環境生成數字證書的步驟:
一、安裝openssl
a) 略
二、生成ca證書
a) 建立一個證書目錄,mkdir /home/liuzhigong/SSL
b) 将CA.sh拷貝到/home/liuzhigong/SSL目錄,cp /usr/lib/ssl/misc/CA.sh /home/liuzhigong/SSL
c) ./CA.sh -newca
d) 根據提示填寫資訊完成後,在demoCA下會生成證書檔案,其中demoCA/private/cakey.pem為ca證書私鑰,demoCA/cacert.pem為ca根證書。
三、生成伺服器證書
a) 生成私鑰: openssl genrsa -des3 -out server.key 1024
b) 生成csr檔案: openssl req -new -key server.key -out server.csr
c) 生成證書&簽名: openssl ca -in server.csr -out server.crt
四、生成用戶端證書
a) 生成私鑰: openssl genrsa -des3 -out client.key 1024
b) 生成csr檔案: openssl req -new -key client.key -out client.csr
c) 生成證書&簽名: openssl ca -in client.csr -out client.crt
五、生成浏覽器支援的.pfx(.p12)證書
安裝過支付寶、财付通證書的使用者都知道,證書檔案格式為pfx,那如何把我們的數字證書轉換為浏覽器識别的格式呢?
a) openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx
六、生成不帶密碼驗證的client/server.key.unsecure
如果你想要把數字證書用于Nginx、Apache等Web伺服器,你會發現啟動nginx伺服器時會要求你輸入數字證書密碼,這是因為在設定私鑰key時将密碼寫入了key檔案,導緻Nginx/Apache等系列伺服器在啟動時要求Enter PEM pass phrase。我們需要做的是剝離這個密碼,利用如下OpenSSL指令生成server.key.unsecure檔案
openssl rsa -in server.key -out server.key.unsecure
參考資料:Can I skip the PEM pass phrase question when I restart the webserver?
七、常見錯誤
a) openssl TXT_DB error number 2 failed to update database.
This thing happens when certificates share common data. You cannot have two certificates that look otherwise the same.
這種情況一般發生在你之前生成過一樣的證書,又想重新生成一模一樣的證書。
解決方法有2種:
1) 修改demoCA下 index.txt.attr,将unique_subject = yes改為unique_subject = no
2) 删除demoCA下的index.txt,并建立一個空的index.txt