標籤:des class ext com 使用 strong
Step 1. Create key (password protected)
openssl genrsa -out prvtkey.pem 1024/2038 (with out password protected)
openssl genrsa -des3 -out prvtkey.pem 1024/2048 (password protected)
這個命令會產生一個1024/2048位的密鑰。
Step 2. Create certification request
openssl req -new -key prvtkey.pem -out cert.csr
openssl req -new -nodes -key prvtkey.pem -out cert.csr
這個命令將會產生一個認證請求,當然,用到了前面產生的密鑰prvtkey.pem檔案
這裡將產生一個新的檔案cert.csr,即一個認證請求檔案,你可以拿著這個檔案去數位憑證頒發機構(即CA)申請一個數位憑證。CA會給你一個新的檔案cacert.pem,那才是你的數位憑證。
Step 3: Send certificate request to Certification Authority (CA)
如果是自己做測試,那麼認證的申請機構和頒發機構都是自己。就可以用下面這個命令來產生認證:
openssl req -new -x509 -key prvtkey.pem -out cacert.pem -days 1095
這個命令將用上面產生的密鑰privkey.pem產生一個數位憑證cacert.pem
cacert.pem 產生過程見“OpenSSL建立自己的CA”
有了privkey.pem和cacert.pem檔案後就可以在自己的程式中使用了,比如做一個加密通訊的伺服器
-------------
OpenSSL建立自己的CA
(1) 環境準備
首先,需要準備一個目錄放置CA檔案,包括頒發的認證和CRL(Certificate Revoke List)。
這裡我們選擇目錄 /var/MyCA。
然後我們在/var/MyCA下建立兩個目錄,certs用來儲存我們的CA頒發的所有的認證的副本;private用來儲存CA認證的私密金鑰匙。
除了產生鑰匙,在我們的CA體系中還需要建立三個檔案。第一個檔案用來跟蹤最後一次頒發的認證的序號,我們把它命名為serial,初始化為01。第二個檔案是一個排序資料庫,用來跟蹤已經頒發的認證。我們把它命名為index.txt,檔案內容為空白。
$ mkdir /var/MyCA
$ cd /var/MyCA
$ mkdir certs private
$ chmod g-rwx,o-rwx private
$ echo "01" > serial
$ touch index.txt
第三個檔案是OpenSSL的設定檔,建立起來要棘手點。樣本如下:
$ touch openssl.cnf
檔案內容如下:
[ ca ]
default_ca = myca
[ myca ]
dir = /var/MyCA
certificate = $dir/cacert.pem
database = $dir/index.txt
new_certs_dir = $dir/certs
private_key = $dir/private/cakey.pem
serial = $dir/serial
default_crl_days= 7
default_days = 365
default_md = md5
policy = myca_policy
x509_extensions = certificate_extensions
[ myca_policy ]
commonName = supplied
stateOrProvinceName = supplied
countryName = supplied
emailAddress = supplied
organizationName= supplied
organizationalUnitName = optional
[ certificate_extensions ]
basicConstraints= CA:false
我們需要告訴OpenSSL設定檔的路徑,有兩種方法可以達成目的:通過config命令選項;通過環境變數OPENSSL_CONF。這裡我們選擇環境變數的方式。
$ OPENSSL_CONF=/var/MyCA/openssl.cnf"
$ export OPENSSL_CONF
(2) 產生根憑證 (Root Certificate)
我們需要一個認證來為自己頒發的認證簽名,這個認證可從其他CA擷取,或者是自簽名的根憑證。這裡我們產生一個自簽名的根憑證。
首先我們需要往設定檔裡面添加一些資訊,如下所示,節名和命令列工具的命令req一樣。我們把所有必要的資訊都寫進配置,而不是在命令列輸入,這是唯一指定X.509v3擴充的方式,也能讓我們對如何建立根憑證有個清晰的把握。
[ req ]
default_bits = 2048
default_keyfile = /var/MyCA/private/cakey.pem
default_md = md5
prompt = no
distinguished_name = root_ca_distinguished_name
x509_extensions = root_ca_extensions
[ root_ca_distinguished_name ]
commonName = My Test CA
stateOrProvinceName = HZ
countryName = CN
emailAddress = [email protected]
organizationName = Root Certification Authority
[ root_ca_extensions ]
basicConstraints = CA:true
萬事俱備,我們可以產生根憑證了。注意設定好環境變數OPENSSL_CONF。
$ openssl req -x509 -newkey rsa -out cacert.pem -outform PEM -days 356
註:“-days 356“控制有效期間限為365天,預設為30天。
驗證一下我們產生的檔案。
$ openssl x509 -in cacert.pem -text -noout
(3) 給客戶頒發認證
在給客戶頒發認證之前,需要客戶提供認證的基本資料。我們另外開啟一個終端視窗,使用預設的OpenSSL設定檔(不要讓之前的OPENSSL_CONF幹擾我們,那個配置是專門用來產生根憑證的)。
命令和我們產生根憑證的類似,都是req,不過需要提供一些額外的資訊。如下:
$ openssl req -newkey rsa:1024 -keyout testkey.pem -keyform PEM -out testreq.pem -outform PEM
有兩次提示要口令,第一次的口令用來加密私密金鑰匙testkey.pem,第二次口令一般被OpenSSL忽略。
結果產生兩個檔案:testkey.pem,私密金鑰匙;testreq.pem,請求資訊,其中包括公開金鑰匙。
我們來看看testreq.pem都有哪些資訊?
$ openssl req -in testreq.pem -text -noout
現在,我們可以把testreq.pem提交給我們的CA產生認證了。
為了方便起見,我們假定testreq.pem在//var/MyCA/private/中。
$ openssl ca -in testreq.pem
有三次提示,一次是問你CA的私密金鑰匙密碼,兩次是確認,輸出的結果就是為客戶頒發的認證。
可以通過batch選項取消命令提示,可通過notext選項取消認證的輸出顯示。
此外,還可以一次給多個客戶頒發認證,方法是用 infiles選項替換in選項,不過這個選項必須放在最後,因為此後的任何字元均被處理為檔案名稱列表。
產生的認證放在certs目錄,同時index.txt和serial的內容都發生了改變。