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