1. 程式人生 > >openssl自建CA及生成證書

openssl自建CA及生成證書

檢視openssl版本

openssl version

使用openssl加密和解密檔案

加密檔案

opnessl有一個子命令enc,他可以用來加密檔案,具體引數如下:

-ciphername:指定加密演算法
-in filename:指定加密的檔案
-out filename:指定加密後的檔案
-salt:加鹽(更強的安全性,是預設選項)
-a:對資料先進行base64處理
-e:加密
-d:解密

cp /etc/inittab /tmp/
openssl enc -des3 -salt -a -in inittab -out inittab.
des3

這樣就完成了對檔案inittab的加密,將生成加密檔案inittab.des3,加密結果將會是這個樣子:

U2FsdGVkX1+bhRnD0Kx/xC6z84ZMHuFXfc3M+hqWsGKTKGdcDGdpsFgnVoPaTuAx
4HEkwYBHz+VmOvNuwWwlGEkRjOOSwreS1gy3vn1UuhP36nl+wezx9cRUC3nFgMbm
vg8at2nDFgKpfvoqvX52wTqf15zEpZcHRu5PfwP/R4u/WbiV0pjm4+7lk8uspJqn
YNGLzDE95gYZUMg4JYH2Hb0fp3TDvFE7b7TGad5cy4tZrtDduNdNhbi7W8Oj5Aan
tTOxGnlENIptI/9
yTrfoVc8WWfiGASFwc5PBF3z+2PV6w1/8EHiP4pl5MD2LRTs9 CTJZmuToIRe4iBc1Nde5MflmNPqhha5X+AtrALsW+2kyabBLoE6Gw8K3dBWWxxoc mEgauy8bPzCIQ0F9qrZaJbDF/JL6A7aYtYj6RCDbwgFiIU+y889pMa4ZIQ1CUOJe C5ki8k6kxnMM51eEoD6x1qUYoiRCyTFg/umdSw/OLDMKNUavi6XfEjfdNX46IHCr z1pisElW7VEL6Bb3yKd7XYmeNJ0aeySVIgvk7Riu7LFonm17awjfoo3JrZSYVjCE Tl9GmZevDDgc9H3aguiqkpTom77Fd3fLtTmae+JYLfixyv+eZYSkoRd4JGe/8
JK3 sDPqcR/TktoZU7phpkHg/dwIViCaE2Y2z5bJPB97VJ4wvxVdxcUDAzGXMUQbYL8L WNqXsaZ4977C5zEVpKnuiBxKrQQCvPNVREycWleBkqIHyxiRXH3N/8iPojyxG+fK HGC4KSu+slyL3dTHZrBqxI26P5kvlKepO8I0L56IS3TKXaAbB5ZWDI2cA9jdlnyq +D8eWZH/aB0wbtsQLS5dqHqkAiBXlDJX4m44etFKXaum1k4iU6utjnuuRj6riHxt /rw7DV3crkedx9cH/4ccG2DEit967mPEoVkxNQI+bVJYmFOg+QkJr+IxQdesMYTb 2FbGriFf2XURSlh2UQTb+nejhUmmycWMhza0PjC2fdh+qt0uBU8pgwCkt5WTSQBU OL3MFAMrsor9D0YQtBqgMV4u6dqJPE0k3yTBIP7axj5fO0Y27ETqa8hwOq3IHuR4 WgqAvsFCMWYvhJQchc+pbDutnxSauTn1izgZQFhGyW9Eq3CUl8r/KqBCkIb0Kf5H 9e6FTs325EcDNvUhFCQPiat/FJTnNm2kxjZzY6e9xxOPHeAOGVhJQA==

注意,建立加密檔案的時候還要求輸入密碼,這個密碼將在解密的時候輸入

解密檔案

rm -f inittab
openssl enc -des3 -d -salt -a -in inittab.des3 -out inittab

解密成功,將生成明文的inittab檔案。

使用openssl獲取檔案的特徵碼

openssl有一個子命令dgst,用於獲取檔案的特徵碼。

openssl dgst -sha1 inittab
SHA1(inittab)= 7f1a11159e1f44a5b2f2f9de2b99ab3f23e0ef1f

sha1sum inittab
7f1a11159e1f44a5b2f2f9de2b99ab3f23e0ef1f  inittab

可以看到,兩種方法,一種是用openssl指定演算法生成特徵碼,另一種直接利用演算法的命令列工具生成特徵碼,兩者結果都相同。

openssl生成隨機數

子命令rand用於生成隨機數:

openssl rand -base64 6
SuzFx8vl

其中,6用於指定隨機數的位數

openssl實現私有CA

主要步驟:
1、需要生成一對祕鑰
2、生成自簽證書

生成一對祕鑰

一般使用genrsa命令生成一個私鑰,然後從中提取公鑰。且這個私鑰許可權必須為600,因為很重要。

openssl genrsa 2048 > server.key
chmod 600 server.key

然後從私鑰中提取公鑰:

openssl rsa -in server.key -pubout > server.pub

生成自簽署證書

生成證書使用req命令,其中引數如下:

-new:表示新的申請
-x509:表示生成自簽證書
-key:指定私鑰檔案
-out:儲存證書的位置
-days:指定證書期限

openssl req -new -x509 -key server.key -out server.crt -days 365

之後會進入互動模式,依次輸入:國家程式碼、省、市、公司名稱、組織名稱、主機名(這個主機名稱很重要,因為要建立通訊認證證書的有效性)、郵件

證書內容是加密的,想檢視內容可以使用下面的命令:

openssl x509 -text -in server.crt

現在自建的CA還不能工作,因為在Linux上生成的自建證書不能隨便放。

CA配置檔案

配置檔案預設位置為:/etc/pki/tls/openssl.cnf
其中的重要配置如下:

dir             = /etc/pki/CA       工作目錄位置
certs           = $dir/certs       證書儲存位置
crl_dir         = $dir/crl         證書吊銷列表位置
database        = $dir/index.txt   發證的索引檔案位置
new_certs_dir   = $dir/newcerts        新生成的證書位置
certificate     = $dir/cacert.pem  CA自己的證書
serial          = $dir/serial      證書序列號
crlnumber       = $dir/crlnumber   證書撤銷列表的序列號
crl             = $dir/crl.pem         證書吊銷列表檔案
private_key     = $dir/private/cakey.pem   CA自己的私鑰
RANDFILE        = $dir/private/.rand   隨機數檔案(自己會生成)
default_days    = 365           預設的證書有效期
default_crl_days= 30            預設的吊銷列表中證書存放時間
default_md      = default       預設的加密演算法
countryName_default             = CN        預設國家程式碼
stateOrProvinceName_default     = Guangzhou     預設省
localityName_default    = Shenzhen      預設市
0.organizationName_default      = MyCpmpany     預設公司名稱
organizationalUnitName_default  = Tech      預設組織名稱

在配置檔案總新增預設值就可以在生成證書時不用輸入一些內容

重新生成CA私鑰:

cd /etc/pki/CA/private
openssl genrsa -out cakey.pem 2048

生成公鑰:

openssl req -new -x509 -key cakey.pem -out cacert.pem
mv cacert.pem /etc/pki/CA/

準備目錄和檔案:

mkdir certs  crl  newcerts
touch index.txt serial
echo 01 > serial

這裡給serial一個起始號,如果沒有證書吊銷列表的話可以不給index指定吊銷起始號碼

至此,私有CA伺服器準備完畢。其他主機只需要向這臺CA伺服器申請證書即可

其他主機申請證書

登陸一臺其他伺服器:

mkdir -p /etc/httpd/ssl
cd /etc/httpd/ssl

不同的服務儘量不使用一個證書。

首先建立私鑰:

openssl genrsa -out httpd.key 1024

生成證書申請:

openssl req -new -key httpd.key -out httpd.csr

注意,這裡的Organization Name必須和CA上的一致,否則不給籤。

將申請發給CA伺服器,然後CA伺服器簽署:

openssl ca -in httpd.csr -out httpd.crt -days 365

這樣就簽署好了,然後發回簽好的證書即可。在CA伺服器上可以檢視到以下的更改:

cd /etc/pki/CA/
V   190407072536Z       01  unknown /C=CN/ST=Guangzhou/O=MyCompany/OU=Tech/CN=k8s-233