歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 使用OpenSSL生成證書

使用OpenSSL生成證書

日期:2017/2/28 14:23:37   编辑:Linux教程

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的內容都發生了改變。

通過OpenSSL提供FTP+SSL/TLS認證功能,並實現安全數據傳輸 http://www.linuxidc.com/Linux/2013-05/84986.htm

利用OpenSSL簽署多域名證書 http://www.linuxidc.com/Linux/2014-10/108222.htm

OpenSSL 的詳細介紹:請點這裡
OpenSSL 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved