利用keytool、openssl生成證書文件

轉載請標明出處:http://blog.csdn.net/shensky711/article/details/52225073
本文出自: 【HansChen的博客】

用openssl指令逐步生成各個文件

  1. 生成服務器密鑰:openssl genrsa -out server_private.key 2048
  2. 從密鑰生成公鑰(非必須):openssl rsa -in server_private.key -pubout > server_public.key
  3. 生成證書請求文件,這裏會讓你輸入一堆信息,比如組織名稱、個人信息等:openssl req -new -key server_private.key -out server_req.csr
  4. 初始化CA環境

    mkdir demoCA
    cd demoCA
    mkdir certs crl newcerts
    touch index.txt serial
    echo 00 > serial
    cd ..
  5. 生成ca密鑰:openssl genrsa -out ca.key 2048

  6. 生成ca證書:openssl req -new -x509 -key ca.key -out ca.crt
  7. 用ca對服務器證書請求文件進行簽名:openssl ca -in server_req.csr -out server.crt -cert ca.crt -keyfile ca.key -config /usr/ssl/openssl.cnf
  8. 可以把服務端的私鑰和已簽名的證書合併到一個pkcs12格式的文件:openssl pkcs12 -export -out server.pfx -inkey server_private.key -in server.crt
  9. 也可以把pkcs12格式轉化爲java常用的jks格式:keytool -importkeystore -v -srckeystore server.pfx -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore server.jks -deststoretype jks -deststorepass 123456

用keytool生成

keytool主要可以幫我們:

  1. 創建一個新的JKS(Java Key Store)文件(裏面包含了一個新生成的服務器密鑰)
  2. 導出一個CSR(Certificate Signung Request)證書申請文件
  3. 導入一個簽名後的證書文件到jks文件中

以下是操作步驟:

  1. 生成新的jks文件:keytool -genkeypair -alias server -keyalg RSA -keystore server.jks
  2. 到出證書請求文件:keytool -certreq -alias server -file server.csr -keystore server.jks
  3. 用ca對請求文件進行簽名(ca的生成請參考上面):openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config demoCA/config/openssl.cnf
  4. 導入已簽名的證書到jks:keytool -importcert -alias server -file server.crt -keystore server.jks

這樣,我們就得到了一個包含了服務器密鑰以及已簽名證書的jks文件了

最終生成的文件

最終服務端需要用到的文件有:
1. 服務器私鑰
2. 經過CA簽名的證書(包含服務器公鑰、基本信息)

客戶端需要用到的文件有:
1. CA的證書(包含了CA的公鑰,用以對服務器的證書解密,校驗證書真僞)

有些服務器配置可以使用私鑰+證書合併在一起的文件,如jks或者pkcs12文件,這類文件一般叫key.keystore。客戶端使用的ca證書一般稱爲:truststore

遇到的問題

openssl對證書籤名的時候有可能報國家、組織、地區需一致的錯誤,是因爲在openssl.cfg中的policy_match裏面的前三個都選了match,可以修改optional,修改後就可以了

發佈了29 篇原創文章 · 獲贊 60 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章