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/9yTrfoVc8WWfiGASFwc5PBF3z+2PV6w1/8EHiP4pl5MD2LRTs9
CTJZmuToIRe4iBc1Nde5MflmNPqhha5X+AtrALsW+2kyabBLoE6Gw8K3dBWWxxoc
mEgauy8bPzCIQ0F9qrZaJbDF/JL6A7aYtYj6RCDbwgFiIU+y889pMa4ZIQ1CUOJe
C5ki8k6kxnMM51eEoD6x1qUYoiRCyTFg/umdSw/OLDMKNUavi6XfEjfdNX46IHCr
z1pisElW7VEL6Bb3yKd7XYmeNJ0aeySVIgvk7Riu7LFonm17awjfoo3JrZSYVjCE
Tl9GmZevDDgc9H3aguiqkpTom77Fd3fLtTmae+JYLfixyv+eZYSkoRd4JGe/8JK3
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

你可能感兴趣的:(证书)