使用OpenSSL生成證書

2021-07-08 14:13:54 字數 4343 閱讀 6425

step 1. create key (password protected)

openssl genrsa -out prvtkey.pem 1024/2038                     (with outpassword 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的內容都發生了改變。

使用OpenSSL生成證書

step 1.create key password protected openssl genrsa out prvtkey.pem 1024 2038 with outpassword protected openssl genrsa des3 out prvtkey.pem 1024 2048...

OpenSSL生成證書

要生成證書的目錄下建立幾個檔案和資料夾,有.democa democa newcerts democa index.txt democa serial,在serial檔案中寫入第乙個序列號 01 1.生成x509格式的ca自簽名證書 opensslreq new x509 keyout ca.key...

openssl 生成 證書

x509 證書一般會用到三類文,key,csr,crt。key是私用金鑰 openssl 格,通常是 rsa演算法。csr是證書請求檔案,用於申請證書。在製作 csr檔案的時,必須使用自己的私鑰來簽署申,還可以設定乙個金鑰。crt是ca 認證後的證書文,windows 下面的,其實是 crt 簽署人...