linux中主要通过openssl,gpg等工具来实现加密解密机制,这里我只介绍下openssl的使用方法:
openssl主要由三部分组成:
libencrypto库
libssl库
openssl多用途命令行工具
前两种是开发调用openssl功能时专用的一些接口,这里就不做过多表述了,现在只介绍一下openssl的一些简单用法:
openssl从多子命令分为三类:标准命令,消息摘要命令(dgst子命令),加密命令(enc子命令)
常用用法:
对称加密:
加密:openssl enc -e -des3 -a -salt -in fstab -out fstab.des3
解密:openssl enc -d -des3 -a -salt -out fstab1 -in fstab.des3
单向加密:
dgst命令:openessl dgst -md5 fstab
生成用户密钥:
passwd命令:openssl passwd -1 -salt 123456
生成随机数:
rand命令:openssl rand -hex 10
生成密钥:
生成私钥:(umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
提出公钥:openssl rsa -in ./my.pem -pubout
()中的命令表示打开一个子shell执行命令,这样修改的umask值不影响当前shell
下边介绍一下如何用openssl构建私有CA;
创建私有CA要用到的配置文件为:/etc/pki/tls/openssl.cnf
在确定配置为CA的服务器上生成一个自签的证书,并未CA提供所需要的目录及文件即可;
具体步骤:
(1)生成私钥
(umask 077;openssl genrsa -out /etc/pki/CA/cakey.pem 4096)
(2)生成自签名证书:
openssl req -new -x509 -key /etc/pki/CA/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
填入相关信息,则自签证书完成;
-new:生成新证书签署请求;
-x509:生成自签格式证书,专用于创建私有CA时;
-key:生成请求时用到的私有文件路径;
-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;
-days:证书的有效时长,单位是day;
(3)为CA提供所需的目录及文件(不存在就需要手动创建)
mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
touch /etc/pki/CA/{serial,index.txt}
echo 01 > /etc/pki/CA/serial
至此,私建的CA已完成,如果要用到证书进行安全通信的服务就可以向其请求签署证书了;
这里以httpd服务为例,简单描述一下申请证书的过程:
具体步骤:
(1)用到证书的主机生成私钥:
mkdir /etc/httpd/ssl
cd /etc/httpd/ssl
(umask 077;openssl getrsa -out /etc/httpd/ssl/httpd.key 4096)
(2)生成证书签署请求文件:
openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
(3)将生成的httpd.csr文件以安全的方式发送给CA主机,这里只是测试,我直接用scp复制了
scp /etc/httpd/ssl/httpd.csr [email protected]:/tmp/
(4)在CA主机上签署证书
openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
(5)将签署后的证书以安全可靠的方式交付给请求主机
scp /etc/pki/CA/certs/htttpd.crt [email protected]:/etc/httpd/ssl/
至此,申请证书的流程完毕。
由于一些特殊的原因,我们也许会申请吊销证书,下边说说如何吊销证书:
具体步骤:
(1)客户端获取要吊销的证书的serial(在使用证书的主机执行)
openssl x509 -in /etc/httpd/ssl/httpd.crt -noout -serial -subject
(2)CA机根据客户提交的serial和subject信息,对比与本机数据库index.txt中存储的是否一致,一致的话就予以吊销;
openssl ca -revoke /etc/pki/CA/newcerts/01.pem
(3)生成吊销证书的吊销编号(第一次吊销证书时执行)
echo 01 > /etc/pki/CA/crlnumber
(4)更新证书吊销列表
openssl ca -gencrl -out /etc/pki/CA/crl/httpd.crl
(5)查看crl文件;
openssl crl -in /etc/pki/CA/crl/httpd.crl -noout -text
至此,证书已被吊销。