在Windows和Linux下用OpenSSL產生認證

來源:互聯網
上載者:User

在OpenSSL中認證的產生步驟:
1.    產生一個RSA私密金鑰檔案,同時為這個私密金鑰檔案產生一個認證申請。
首先需要使用者輸入一個給RSA私密金鑰檔案加密的口令,並要求使用者確認口令。之後,要求使用者為認證申請檔案輸入使用者相應的資訊,例如使用者所在國家,地區,城市,使用者的名字等等(剩下的資訊是可選填的,而這些跟CA使用的政策有關)。這裡需要使用者如實填寫,這些資訊將會被用來進行資訊校正,與CA根憑證進行對比,檢查內容是否匹配。
2.    使用ca命令,在CA中,對認證申請進行審核與簽發。
首先會對認證資訊進行校正,校正完成後會將認證資訊顯示出來要求管理員確認。一經管理員確認,就會簽發認證。簽發出來的認證將會被儲存在CA的Newcert目錄下,檔案名稱以認證的序號命名。
下面給出詳細的產生認證的執行個體。
Linux下用OpenSSL產生認證
1.首先,我們要建立一個基本的CA目錄結構。
在openssl.cnf檔案中指定的CA目錄下建立目錄newcerts、cert、private、crl。(這裡指定的CA根目錄是/etc/ssl/demoCA)
$sudo mkdir certs
$sudo mkdir private
$sudo mkdir crl
$sudo mkdir newcerts
在openssl.cnf檔案中指定的CA目錄下建立空檔案index.txt。
$sudo vi index.txt 直接儲存
在openssl.cnf檔案中指定的CA目錄下建立了serial檔案,並且用vi給當中寫入了數值01。
$sudo vi serial 並且寫入數值”01”,然後儲存退出。

也可以用ca.pl 指令碼自動建立所需要的目錄

將apps目錄下的ca.pl檔案複製到你想要放置CA目錄結構的目錄,執行perl ca.pl -newca

2. linux下OpenSSL下的CA機制的配置
OpenSSL下的CA機制配置主要依靠根目錄下的openssl.cnf檔案。他規定了CA產生,簽發和吊銷認證的主要規則。並且openssl的ca指令必須搭配正確的openssl.cnf檔案配置才能夠正確運行(ca命令並不一定需要完全依賴於openssl.cnf檔案中的配置才能正常運行,其實在ca命令中,存在另外一種機制,可以在命令列中指定相應的配置資訊,但是這種方法使用起來太過繁瑣,不推薦使用)。所以,我們首先必須給OPENSSL CA指定一個正確的設定檔。以下列出檔案中幾處比較重要的欄位資訊加以說明。
[ ca ]
default_ca       = CA_default  
這一部分十分簡單,只包含了一個索引值default_ca,他的值是一個儲存了CA預設配置的段的名字,這裡是CA_default。這意味著OpenSSL在產生認證時將要到CA_default欄位來尋找相應的配置資訊。
openssl命令允許在一個設定檔裡面,存在有多個CA的配置。
[ CA_default ]
這個段裡包含了CA的配置資訊,其中主要包括了指定CA的根目錄結構,並且告訴openssl去那裡去能夠找到他簽發認證時需要的檔案,和將要產生的檔案的存放位置。
[ CA_default ]
dir          = /etc/ssl/demoCA  # 指定了CA的根目錄
certs                  = $dir/certs            # 已經簽發的認證的儲存目錄
crl_dir            = $dir/crl            # 儲存憑證撤銷清單的目錄
database      = $dir/index.txt      # 資料庫的索引檔案,用來存放簽發認證的資訊。
#unique_subject     = no               #設定為’no’表示允許同時建立多個相同主題的認證。
new_certs_dir = $dir/newcerts             # 設定存放新簽發的認證的預設位置
Certificate      = $dir/cacert.pem # 指定CA認證
serial              = $dir/serial           # 指定存放當前序號的檔案
crl          = $dir/crl.pem              # 當前的CRL
private_key     = $dir/private/cakey.pem # CA的私密金鑰
RANDFILE    = $dir/private/.rand       #指明一個用來讀寫時候產生random key的seed檔案。
當我們需要在命令列中使用req命令產生認證請求檔案,我們必須為req命令提供必要的資訊,在命令列中,提供了與其命名相同的段,來配置其必要的資訊。
[ req_distinguished_name ]
req_distinguished_name這個擴充地區的索引值是在我們使用req命令產生認證請求檔案時希望被填入的資訊。
3. 產生CA認證和使用者認證。
(1)$sudo openssl req -x509 -newkey rsa:1024 -out cacert.pem -outform PEM
這一步用來產生一個1024位的RSA私密金鑰“privkey.pem”,並用他自簽發出來一個認證“cacert.pem”,這個認證將來用來當作CA根憑證(這裡會要求使用者填入相應的資訊,首先是privkey.pem的加密口令,下來是CA根憑證的相應資訊)。
(2)$sudo cp privkey.pem  /etc/ssl/demoCA/private/cakey.pem
將ca的私密金鑰privkey.pem拷貝到/etc/ssl/demoCA/private下,並改名為cakey.pem。CA中心在簽發認證的時候會來這個目錄下找cakey.pem檔案。
(3)$sudo cp cacert.pem /etc/ssl/demoCA
將cacert.pem拷貝到/etc/ssl/demoCA檔案夾下。CA中心在簽發認證的時候會來這個目錄下找cacert.pem檔案。
(4)$sudo openssl req -newkey rsa:1024 -keyout testkey.pem -keyform PEM -out testreq.pem -outform PEM
產生一個使用者密鑰,並為這個使用者密鑰產生一個認證申請(這裡會要求使用者輸入個人資訊,首先是私密金鑰檔案testkey.pem的加密口令,下來是認證申請檔案testreq.pem的相應使用者資訊)。這個認證申請在CA中心申請簽發認證的時候,將會被用作資訊校正。
(5)$sudo openssl ca -in testreq.pem -out testres.pem –config openssl.cnf
ca指令是一個類比的CA伺服器程式,他實現了CA伺服器的準系統。這裡將會校正認證申請中的資訊,如果正確,將提示使用者是否簽發認證。如果使用者選擇yes,CA將為這個認證申請頒發認證testres.pem。
(6)$sudo cat testkey.pem testres.pem >test.pem
把密鑰檔案testkey.pem和CA為他頒發的認證檔案testres.pem合并為test.pem。omniORB認證過程中將用到這個認證檔案(其中可以將認證檔案中供使用者閱讀的部分刪除,在認證過程中這部分內容將不會被用到)。
(其中cacert.pem是CA認證檔案,testkey.pem是的使用者私密金鑰。privkey.pem是ca認證的私密金鑰,testreq.pem為認證請求檔案。而testres.pem是為認證申請頒發的認證。
把密鑰檔案testkey.pem和為他頒發的認證檔案testres.pem合并為test.pem。)
在Windows下用OpenSSL產生認證
1.首先,我們要建立一個基本的CA目錄結構。
在openssl.cnf檔案中指定的CA目錄下建立目錄newcerts、cert、private、crl
在openssl.cnf檔案中指定的CA目錄下建立空檔案index.txt。
在openssl.cnf檔案中指定的CA目錄下建立了serial檔案,並且用vi給當中寫入了數值01。
也可以用ca.pl 指令碼自動建立所需要的目錄
將apps目錄下的ca.pl檔案複製到你想要放置CA目錄結構的目錄,執行perl ca.pl -newca

2.設定環境openssl變數:
在系統變數 PATH下增加 C:\openssl-0.9.8e/out32dll
設定環境變數OPENSSL_CONF = C:\openssl-0.9.8e\apps\openssl.cnf

3.修改openssl安裝目錄下檔案 openssl安裝目錄/apps/openssl.cnf (注意該檔案在windows下檔案類型為快速撥號,不知道怎麼回事)
做如下修改:
[ CA_default ]
dir          = C:\\openssl-0.9.8e\\apps\\demoCA            # Where everything is kept
certs              = $dir\\certs           # Where the issued certs are kept
crl_dir            = $dir\\crl              # Where the issued crl are kept
database  = $dir\\index.txt     # database index file.
#unique_subject     = no               # Set to 'no' to allow creation of
                                   # several ctificates with same subject.
new_certs_dir = $dir\\newcerts            # default place for new certs.
certificate       = $dir\\cacert.pem        # The CA certificate
serial              = $dir\\serial          # The current serial number
crlnumber       = $dir\\crlnumber   # the current crl number
                                   # must be commented out to leave a V1 CRL
crl          = $dir\\crl.pem             # The current CRL
private_key     = $dir\\private\\cakey.pem# The private key
RANDFILE    = $dir\\private\\.rand      # private random number file
x509_extensions     = usr_cert             # The extentions to add to the cert

4.產生CA認證和使用者認證。
(1)openssl req -x509 -newkey rsa:1024 -out cacert.pem -outform PEM
這一步用來產生一個1024位的RSA私密金鑰“privkey.pem”,並用他自簽發出來一個認證“cacert.pem”,這個認證將來用來當作CA根憑證(這裡會要求使用者填入相應的資訊,首先是privkey.pem的加密口令,下來是CA根憑證的相應資訊)。
(2)將ca的私密金鑰privkey.pem拷貝到/demoCA/private下,並改名為cakey.pem。CA中心在簽發認證的時候會來這個目錄下找cakey.pem檔案。
(3)將cacert.pem拷貝到demoCA檔案夾下。CA中心在簽發認證的時候會來這個目錄下找cacert.pem檔案。
(4)openssl req -newkey rsa:1024 -keyout testkey.pem -keyform PEM -out testreq.pem -outform PEM
產生一個使用者密鑰,並為這個使用者密鑰產生一個認證申請(這裡會要求使用者輸入個人資訊,首先是私密金鑰檔案testkey.pem的加密口令,下來是認證申請檔案testreq.pem的相應使用者資訊)。這個認證申請在CA中心申請簽發認證的時候,將會被用作資訊校正。
(5)openssl ca -in testreq.pem -out testres.pem
ca指令是一個類比的CA伺服器程式,他實現了CA伺服器的準系統。這裡將會校正認證申請中的資訊,如果正確,將提示使用者是否簽發認證。如果使用者選擇yes,CA將為這個認證申請頒發認證testres.pem。
(6)cat testkey.pem testres.pem >test.pem
把密鑰檔案testkey.pem和CA為他頒發的認證檔案testres.pem合并為test.pem。omniORB認證過程中將用到這個認證檔案(其中可以將認證檔案中供使用者閱讀的部分刪除,在認證過程中這部分內容將不會被用到)。
(其中cacert.pem是CA認證檔案,testkey.pem是的使用者私密金鑰。privkey.pem是ca認證的私密金鑰,testreq.pem為認證請求檔案。而testres.pem是為認證申請頒發的認證。
把密鑰檔案testkey.pem和為他頒發的認證檔案testres.pem合并為test.pem。omni中將用到這個檔案。)

註:可以在設定檔裡指明產生認證時的一些預設選項
如開始時間和截止時間可以寫在設定檔中:
default_startdate = 010101000000Z    ##Not Before: Jan  1 00:00:00 2001 GMT
default_enddate = 150101000000Z     ##Not After : Jan  1 00:00:00 2015 GMT
時間格式為YYMMDDHHMMSSZ

附:Ca命令的用法
openssl ca [-verbose] [-config filename] [-name section] [-gencrl]
     [-revoke file] [-crldays days] [-crlhours hours] [-crlexts section]
     [-startdate date] [-enddate date] [-days arg] [-md arg] [-policy arg]
     [-keyfile arg] [-key arg] [-passin arg] [-cert file] [-in file]
     [-out file] [-notext] [-outdir dir] [-infiles] [-spkac file]
     [-ss_cert file] [-preserveDN] [-batch] [-msie_hack] [-extensions section]
看似ca命令非常的複雜,其實用起來非常簡單,我們這裡需要用到的參數並不多。下面給出了參數的列表,可以進行參考。
-config filename
指定一個將要用到的設定檔的檔案名稱。
-verbose
顯示比平時更多的資訊。
-name section
指定在設定檔中包含了預設CA配置的欄位。
-in filename
指定一個將要被CA簽發的請求檔案的檔案名稱,這裡將產生一個認證。
-ss_cert filename
指定一個將要被CA簽發的自我簽發的認證的檔案名稱。
-spkac filename
指定一個包含了NetScape簽發的公開金鑰資訊和Challenge的資訊的檔案名稱。
-infiles
如果使用了這個選項,這個選項必須放在命令列的最後,他所指定的每一個參數都被認為是一個包含了認證申請的檔案,並且在隨後會為每一個認證請求籤發認證。
-out filename
指定一個要被寫入認證資訊的檔案的檔案名稱,預設的是用stdout寫出,如果這之前使用了gencrl選項,他所指定的檔案資訊將被寫入到廢除認證列表中。
-outdir directory
指定了認證將要寫入的檔案夾,每個被寫入的檔案的檔案名稱都由2位16進位的序號和.pem的副檔名組成。
-cert filename
指定包含CA的認證的檔案。
-keyfile filename
指定了包含CA的私密金鑰的檔案。
-key password
指定了用來解密CA私密金鑰檔案的密碼。這個選項不推薦適用,應該用-passin password替代
-passin password
指定了用來解密CA私密金鑰檔案的密碼或者口令。
-notext
產生了在輸出檔案中應該被排除的檔案。
-startdate date
指定了認證被簽發時間或者認證起效時間。
-enddate date
指定了認證失效時間。
-days number
指定了被簽發起效的認證的天數。
-md digest
指定了將要使用的資訊摘要演算法。
-policy section
指定了在設定檔中那個部分將被用來指定policy的配置。
-msie_hack
如果你需要使用IE認證登記控制中一種非常老的版本"certenr3",那麼請使用這個選項。
-extensions section
指定了在設定檔中那一部分將要用來指定extensions段的配置。
-gencrl
使產生一個憑證撤銷清單。
-crldays number
指定了憑證撤銷清單重新整理的日期(產生下一個憑證撤銷清單所間隔的天數)。
-crlhours number
指定了憑證撤銷清單重新整理的小時(產生下一個憑證撤銷清單所間隔的小時)。
-revoke filename
指定了一個包含了將要被撤銷憑證的檔案。
-crlexts section
指定了在設定檔中crlexts段的配置在那裡。 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.