Windows下OpenSSL創建CA證書以及客戶端和服務器端證書


打開命令行工具,轉到安裝目錄bin文件夾,
$ mkdir -p ./demoCA/{private,newcerts}
$ touch ./demoCA/index.txt
$ echo 01 > ./demoCA/serial
產生的目錄結構如下:
`-- demoCA/
    |-- index.txt
    |-- newcerts/
    |-- private/
    `-- serial
 然后執行下面的命令。
創建根證書 
openssl rand -out private/.rand 1000
openssl rgenrsa -aes256 -out private/sample-key.pem 2048
 
openssl rreq -new -key private/sample-key.pem -out private/sample.csr -subj "/C=CN/ST=JiangSu/L=NanJing/O=NanJing Sample Technology Group Co.,LTD./OU=Sample"
 
openssl x509 -req -days 825 -sha1 -extensions v3_ca -signkey private/sample-key.pem -in private/sample.csr -out certs/sample.cer
 
openssl pkcs12 -export -clcerts -in certs/sample.cer -inkey private/sample-key.pem -out certs/sample.p12
----------------------------------------------------------------------------*/
創建服務端證書
openssl genrsa -aes256 -out private/server.key.pem 2048
 
openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=JiangSu/L=NanJing/O=NanJing Sample Technology Group Co.,LTD./OU=Sample/CN=127.0.0.1"
 
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certs/sample.cer -CAkey private/sample-key.pem -CAserial sample.srl -CAcreateserial -in private/server.csr -out certs/server.cer
 
openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12 
----------------------------------------------------------------------------*/
創建客戶端證書
openssl genrsa -aes256 -out private/client.key.pem 2048 
 
openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=JiangSu/L=NanJing/O=NanJing Sample Technology Group Co.,LTD./OU=Sample/CN=127.0.0.1"
 
openssl ca -days 3650 -in private/client.csr -out certs/client.cer -cert certs/sample.cer -keyfile private/sample-key.pem /*win7這句會報錯,win10下沒問題,郁悶,cd到bin文件夾下,執行下面語句才通過。*/
openssl ca -days 3650 -in democa/private/client.csr -out democa/certs/client.cer -cert democa/certs/sample.cer -keyfile democa/private/sample-key.pem -config ../openssl.cnf
 
openssl pkcs12 -export -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12


參考文件:

由於實驗需要,需要手動制作CA證書以及客戶端和服務器端證書,總結如下:

最近兩天,查閱了一些關於創建證書的資料,發現網上很多介紹並不是很完整,不具有完全的可操作性。
創建證書,我目前知道的大概這么幾種:
1.keytool
   不能創建CA證書
2.Sybase ASA自帶的createcert.exe
   好像不能創建PKCS12型證書
3.OpenSSL
   功能最強大。
所以,這里干脆只介紹OpenSSL了。

安裝完OpenSSL-Win32到d:\tools之后,修改配置文件d:\tools\OpenSSL-Win32\bin\openssl.cfg
找到:
[ CA_default ]
dir     = $ENV::OPENSSL_HOME/CA # Where everything is kept
這里原來值是./demoCA
還是用絕對路徑比較好。就放到d:\tools\OpenSSL-Win32\CA目錄下。
緊接着,做一些准備工作,創建一些子目錄,准備創建證書,
完全的批處理命令如下:

[plain] 
  1. @echo off  
  2. @rem set OPENSSL_HOME=d:\tools\OpenSSL-Win32  
  3. set PATH=%OPENSSL_HOME%\bin;%PATH%  
  4. mkdir %OPENSSL_HOME%\CA  
  5. cd /d %OPENSSL_HOME%\CA  
  6. echo "create subdir certs"  
  7. mkdir certs  
  8. mkdir newcerts  
  9. mkdir private  
  10. mkdir crl  
  11. echo "create file: index and serial"  
  12. echo 0>index.txt  
  13. echo 01>serial  
  14. echo "create rand file"  
  15. openssl rand -out private/.rand 1000  
  16. @rem echo %random% >> private/.rand  
  17. @echo off  
  18. set PATH=d:\tools\Openssl-Win32\bin;%PATH%  
  19. echo create private key for rootca  
  20. @rem the password, set it as 123456  
  21. openssl genrsa -aes256 -out private/ca.key.pem 2048  
  22. echo generate root ca request  
  23. openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=*.sql9.com"  
  24. echo create root ca cert  
  25. openssl x509 -req -days 10000 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer  
  26. echo convert the cert from cer into PKCS12  
  27. openssl pkcs12 -export -clcerts -in certs/ca.cer -inkey private/ca.key.pem -out certs/ca.p12  
  28. echo use keytool can query the pkcs12 cert status  
  29. keytool -list -keystore certs/ca.p12 -storetype pkcs12 -v -storepass 123456  
  30. echo create server ca  
  31. openssl genrsa -aes256 -out private/server.key.pem 2048  
  32. openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=www.sql9.com"  
  33. openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certs/server.cer  
  34. openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12  
  35. echo create client ca  
  36. openssl genrsa -aes256 -out private/client.key.pem 2048  
  37. openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=sql9"  
  38. openssl ca -days 3650 -in private/client.csr -out certs/client.cer -cert certs/ca.cer -keyfile private/ca.key.pem  
  39. openssl pkcs12 -export -clcerts -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12  
  40. cp -r certs certs.new  
最終certs.new目錄將包含我們想要的所有證書。
原文:http://blog.csdn.net/iihero/article/details/17626845 
 

這一針在農信銀2代項目中有幸能碰到加密方面的東西,所以就好好學習了一下。不足之處還請前輩們見諒。


OpenSSL功能遠勝於KeyTool,可用於根證書,服務器證書和客戶證書的管理
這里使用的是Win32OpenSSL_Light-1_0_1e.exe
http://www.slproweb.com/products/Win32OpenSSL.html
1,構建根證書
構建根證書前,需要構建隨機數文件(.rand),完整命令如
openssl rand -out private/.rand 1000
rand 隨機數命令。這里將隨機數文件輸出到private目錄下。
-out 輸出文件路徑,
這里的參數1000,指定來產生偽隨機字節數
2,構建根證書私鑰
openssl genrsa -aes256 -out private/ca.key.pem 2048
3,生成根證書簽發申請
完成密鑰構建操作后,我們需要生成根證書簽發申請文件(ca.csr),完整命令如代碼
openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=BJ/L=BJ/O=lesaas/OU=lesaas/CN=*.lesaas.cn"
req 產生證書簽發申請命令
-new 表示新請求
-key 密鑰,這里為private/ca.key.pem文件
-out 輸出路徑,這里為private/ca.csr文件
-subj 指定用戶信息。這里使用泛域名"*.lesaas.cn"
得到根證書簽發申請文件后,我們可以將其發生給CA機構簽發,當然我們也可以自行簽發根證書。
4,簽發根證書(自行簽發根證書)
openssl x509 -req -days 10000 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer
x509 簽發X.509格式證書命令。
-req 表示證書輸入請求。
-days 表示有效天數,這里為10000天。
-shal 表示證書摘要算法,這里為SHA1算法。
-extensions 表示按OpenSSL配置文件v3_ca項添加擴展。
-signkey 表示自簽名密鑰,這里為private/ca.key.pem。
-in 表示輸入文件,這里為private/ca.csr。
-out 表示輸出文件,這里為certs/ca.cer。
====================================================================================================
OpenSSL產生的數據證書不能再JAVA語言環境中直接使用,需要將其轉化為PKCS#12編碼格式。
完整命令如代碼
5,根證書轉化
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certs/ca.cer -out certs/ca.p12
pkcs12 PKCS#12編碼格式證書命令。
-export 表示導出證書。
-cacerts 表示僅導出CA證書。
-inkey 表示輸入密鑰,這里為private/ca.key.pem
-in 表示輸入文件,這里為certs/ca.cer
-out 表示輸出文件,這里為certs/ca.p12
個人信息交換文件(PKCS#12) 可以作為密鑰庫或信任庫使用,我們可以通過KeyTool查看密鑰庫的詳細信息。
6,查看密鑰庫信息
keytool -list -keystore d:/CA/certs/ca.p12 -storetype pkcs12 -v -storepass 123456
注意,這里參數-storetype值為“pkcs12”。
我們已經構建了根證書(ca.cer),我們可以使用根證書簽發服務器證書和客戶證書。
7,構建服務器證書
服務器證書的構建與根證書構建相似,首先需要構建私鑰。
(1)構建服務器私鑰
openssl genrsa -aes256 -out private/server.key.pem 2048
genrsa 產生RSA密鑰命令。
-aes256 使用AES算法(256位密鑰)對產生的私鑰加密。可選算法包括DES,DESede,IDEA和AES。
-out 輸出路徑,這里指private/server.key.pem。
這里的參數2048,指RSA密鑰長度位數,默認長度為512位。
(2)生成服務器證書簽發申請
openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=BJ/L=BJ/O=lesaas/OU=lesaas/CN=www.lesaas.cn"
req 產生證書簽發申請命令
-new 表示新請求。
-key 密鑰,這里為private/ca.key.pem文件
-out 輸出路徑,這里為private/ca.csr文件
-subj 指定用戶信息,這里使用域名“www.lesaas.cn”作為用戶名。
我們已經獲得了根證書,可以使用根證書簽發服務器證書。
(3)簽發服務器證書
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out
certs/server.cer
x509 簽發X.509格式證書命令。
-req 表示證書輸入請求。
-days 表示有效天數,這里為3650天。
-sha1 表示證書摘要算法,這里為SHA1算法。
-extensions 表示按OpenSSL配置文件v3_req項添加擴展。
-CA 表示CA證書,這里為certs/ca.cer
-CAkey 表示CA證書密鑰,這里為private/ca.key.pem
-CAserial 表示CA證書序列號文件,這里為ca.srl
-CAcreateserial表示創建CA證書序列號
-in 表示輸入文件,這里為private/server.csr
-out 表示輸出文件,這里為certs/server.cer
這里我們同樣需要將OpenSSL產生的數子證書轉化為PKCS#12編碼格式。完整命令如下
(4)服務器證書轉換
openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12
pkcs12 PKCS#12編碼格式證書命令。
-export 表示導出證書。
-clcerts 表示僅導出客戶證書。
-inkey 表示輸入文件,這里為private/server.key.pem
-in 表示輸入文件,這里為certs/ca.cer
-out 表示輸出文件,這里為certs/server.p12
我們已經構建了服務器證書(server.cer),並可使用該證書構建基於單向認證網絡
(5)構建客戶證書
客戶證書的構建與服務器證書構建基本一致,首先需要構建私鑰。
產生客戶私鑰
openssl genrsa -aes256 -out private/client.key.pem 2048
genrsa 產生RSA密鑰命令
-aes256 使用AES算法(256為密鑰)對產生的私鑰加密。可選算法包括DES,DESede,IDEA和AES。
-out 輸出路徑,這里指private/client.key.pem
這里的參數2048,指RSA密鑰長度位數,默認長度為512位
完成客戶證書密鑰構建后,我們需要產生客戶證書簽發申請
(6)生成客戶證書簽發申請
openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=BJ/L=BJ/O=lesaas/OU=lesaas/CN=lesaas"
req 產生證書簽發申請命令
-new 表示新的請求。
-key 密鑰,這里為private/client.csr文件
-subj 指定用戶信息,這里使用“lesaas”作為用戶名
我們已經獲得了根證書,可以使用根證書簽發客戶證書(client.cer)
(7)簽發客戶證書
openssl ca -days 3650 -in private/client.csr -out certs/client.cer -cert certs/ca.cer -keyfile private/ca.key.pem
ca 簽發證書命令
-days 表示證書有效期,這里為3650天。
-in 表示輸入文件,這里為private/client.csr
-out 表示輸出文件,這里為certs/server.cer
-cert 表示證書文件,這里為certs/ca.cer
-keyfile 表示根證書密鑰文件,這里為private/ca.key.pem
最后,我們需要將獲得客戶證書轉化Java語言可以識別的PKCS#12編碼格式。
(8)客戶證書轉換
openssl pkcs12 -export -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12
pkcs12 PKCS#12編碼格式證書命令、
-export 表示導出證書
-clcerts 表示僅導出客戶證書。
-inkey 表示輸入密鑰,這里為private/client.key.pem
-in 表示輸入文件,這里為certs/client.cer
-out 表示輸出文件,這里為certs/client.p12
至此,我們完成了雙向認證的所需的全部證書。
數字證書是公鑰的載體,而密鑰庫可以包含公鑰、私鑰信息。
JKS和PKCS#12都是比較常用的兩種密鑰庫格式/標准。對於前者,搞Java開發,尤其是接觸過HTTPS平台的朋友,並不陌生。JKS文件(通常為*.jks或*.keystore,擴展名無關)可以通過Java原生工具——KeyTool生成;而后者PKCS#12文件(通常為*.p12或*.pfx,意味個人信息交換文件),則是通過更為常用的OpenSSL工具產生。
當然,這兩者之間是可以通過導入/導出的方式進行轉換的!當然,這種轉換需要通過KeyTool工具進行!
回歸正題,計費同事遇到一個難題:合作方交給他們一個*.pfx文件,需要他們從中提取密鑰,然后進行加密交互。其實,通過Java直接操作密鑰庫文件(或個人信息交換文件)對於一般Java開發人員來說,這都是個冷門。不接觸數字安全,根本不知所雲。況且,Java原生的密鑰庫文件格式為JKS,如何操作*.pfx文件?密鑰庫操作需要獲知密鑰庫別名,*.pfx別名是什么?!接下來就解決這些問題!
(PKCS#12是base64編碼的)
方案:
通過keytool密鑰庫導入命令importkeystore,將密鑰庫格式由PKCS#12轉換為JKS。
檢索新生成的密鑰庫文件,提取別名信息。
由密鑰庫文件導出數字證書(這里將用到別名)。
通過代碼提取公鑰/私鑰、簽名算法等
先看格式轉換:
Cmd代碼 收藏代碼
echo 格式轉換
keytool -importkeystore -v -srckeystore zlex.pfx -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore zlex.keystore -deststoretype jks -deststorepass 123456
-importkeystore導入密鑰庫,通過格式設定,我們可以將PKCS#12文件轉換為JKS格式。
-v顯示詳情
-srckeystore源密鑰庫,這里是zlex.pfx
-srcstoretype源密鑰庫格式,這里為pkcs12
-srcstorepass源密鑰庫密碼,這里為123456
-destkeystore目標密鑰庫,這里為zlex.keystore
-deststoretype目標密鑰庫格式,這里為jks,默認值也如此
-deststorepass目標密鑰庫密碼,這里為123456
通過這個操作,我們能夠獲得所需的密鑰庫文件zlex.keystore。
這時,我們已經獲得了密鑰庫文件,只要確定對應的別名信息,就可以提取公鑰/私鑰,以及數字證書,進行加密交互了!
Cmd代碼 收藏代碼
echo 查看證書
keytool -list -keystore zlex.keystore -storepass 123456 -v
-list列舉密鑰庫
-keystore密鑰庫,這里是zlex.keystore
-storepass密鑰庫密碼,這里是123456
-v顯示詳情
現在,我們把證書導出!
Cmd代碼 收藏代碼
echo 導出證書
keytool -exportcert -alias 1 -keystore zlex.keystore -file zlex.crt -storepass 123456
-exportcert導出證書
-alias別名,這里是1
-keystore密鑰庫,這里是zlex.keystore
-file證書文件,這里是zlex.crt
-storepass密鑰庫密碼,這里是123456

現在證書也導出了,我們可以提取公鑰/私鑰,進行加密/解密,簽名/驗證操作了!當然,即便沒有證書,我們也能夠通過密鑰庫(JKS格式)文件獲得證書,以及公鑰/私鑰、簽名算法等。

原文:http://blog.csdn.net/boss666666/article/details/10284649 

IIS配置SSL時遇到的錯誤:
1)證書鏈中的一個或多個中間證書丟失 

How to configure intermediate certificates

  1. Open the Certificates Microsoft Management Console (MMC) snap-in. To do this, follow these steps:
    1. At a command prompt, type Mmc.exe.
    2. If you are not running the program as the built-in Administrator, you will be prompted for permission to run the program. In the Windows Security dialog box, clickAllow.
    3. On the File menu, click Add/Remove Snap-in.
    4. In the Add or Remove Snap-ins dialog box, click the Certificates snap-in in the Available snap-ins list, click Add, and then click OK.
    5. In the Certificates snap-in dialog box, click Computer account, and then click Next.
    6. In the Select computer dialog box, click Finish.
    7. In the Add or Remove Snap-ins dialog box, click OK.
  2. To add an intermediate certificate, follow these steps:
    1. In the Certificates MMC snap-in, expand Certificates, right-click Intermediate Certification Authorities, point to All Tasks, and then click Import.
    2. In the Certificate Import Wizard, click Next.
    3. In the File to Import page, type the file name of the certificate that you want to import in the File name box, and then click Next.
    4. Click Next, and then complete the Certificate Import Wizard.
詳見微軟support原文https://support.microsoft.com/zh-cn/kb/954755 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM