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證書以及客戶端和服務器端證書,總結以下:html

最近兩天,查閱了一些關於建立證書的資料,發現網上不少介紹並非很完整,不具備徹底的可操做性。
建立證書,我目前知道的大概這麼幾種:
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目錄下。
緊接着,作一些準備工做,建立一些子目錄,準備建立證書,
徹底的批處理命令以下:

web

[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格式)文件得到證書,以及公鑰/私鑰、簽名算法等。 sql

原文: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 
相關文章
相關標籤/搜索