OpenSSL是一个安全套接字层密码库。SSL:Secure Socket Layer。可用于建立私有CA。套接字为IP加端口。CA是为了公钥确实是发送方的公钥而不是伪造的,CA相当于第三方认证机构。公钥加密详解

        对称加密:加密和解密用同一个秘钥。

        公钥加密:秘钥成对出现,公钥用于公开,私钥自己留存,公钥加密的数据只能用配对的私钥解密,反之亦然。

        单项加密:只能加密,用于提取特征码,定长输出。md5、sha1等。


        实际通讯这三种加密算法一起使用,首先将数据用单项加密提取特征码,再用私钥加密特征码,将特征码附加在文件后面,再用对称加密将整个文件加密,再用对方的公钥加密对称秘钥,在将加密后的对称秘钥附加在加密后的文件后面。这样对方可以用私钥解密得到对称秘钥,用对称秘钥解密数据得到明文数据和加密后的数据特征码,再用发送方公钥解密特征码,接收方提取明文数据和特征码对比是否一致,如果一致即为未被篡改的数据了。


定义证书的内容:

        X.509:定义了证书的结构以及认证协议标准

                版本号

                序列号

                签名算法ID

                发行者名称

                有效期限

                主体名称

                主体公钥

                发行者惟一标识

                主体的惟一标识

                扩展

                发行者签名


        OpenSSL是一个开源项目,有三个组件,1.openssl多用途命令行工具,2.libcrypto公共加密库,3.libssl库实现了ssl及tls。后两个是开发使用的。


PKI: Public Key Infrastructure

        签证机构:CA

        注册机构:RA

        证书吊销列表:CRL


openssl命令:

        openssl version        查看版本

        openssl help             查看帮助

                enc        加密工具

                -e          加密

                -d          解密

                -a          基于文本进行编码

                -salt      加入杂质

                -in         指定加密的文件路径

                -out      加密后文件的路径

对称加密:加密和解密使用同一秘钥

        加密:openssl enc -e -des3 -a -salt -in fstab -out demo.txt

        解密:openssl enc -d -des3 -a -salt -in demo.txt -out fstab


单向加密:计算文件特征码

        工具:md5, sha1sum, sha224sum, sha256sum, openssl, dgst......

        例:md5sum demo.txt

                5b38ec7bc2d4841677b6615e421b5602  demo.sh

        例:openssl dgst -md5 demo.sh

                MD5(demo.sh)= 5b38ec7bc2d4841677b6615e421b5602


生成用户密码:

        例:openssl passwd -1 -salt 12345678

                Password: 

                $1$12345678$8fLAv2Wq3De5RcCyyLoze.

                选项中-1表示使用md5加密,-salt指定加入杂质,这个方法可以生成用于加密的密码。


生成随机数:

        rand可以生成随机数。

        例:openssl rand -base64 4        -base64表示使用base64算法进行加密,后面的4指定字节数。

        例:openssl rand -hex 16            -hex表示使用十六进制加密,16表示字节。


公钥加密:

        加密:

                算法:RSA, ELGamal

                工具:gpg, openssl rsautl

        数字签名:

                算法:RSA, DSA, ELGamal

        密钥交换:

                算法:dh


秘钥对生成器:

        例:openssl genrsa -out secure.private 1024        -out表示输出的文件,1024表示字节数。

        生成的私钥文件不可以让别人看见,所以要用:(umask 077; openssl genrsa -out key.pri 2048) 命令,加上括号可以让命令在子shell中运行,umask命令则设置的是子shell的,对当前shell没有影响。


         例:cat secure.private

        -----BEGIN RSA PRIVATE KEY-----

        MIICXQIBAAKBgQCzfFR2g7VhbUwh7/Qf6DqTNBPxRzHbq3+lJy3mJBiUNt/Ja/js

        ......

        -----END RSA PRIVATE KEY-----


提取出公钥:

        从上面的输出中读取私钥

        openssl rsa -in secure.private -out secure.public        -in表示读取的文件,-out输出到的文件


随机数生成器:

        /dev/random        仅从熵池返回随机数,随机数用尽,阻塞

        /dev/urandom      从熵池返回随机数,随机数用尽,会利用软件生成伪随机数;非阻塞


查看证书信息命令:

打印出证书的内容:

openssl x509 -in cert.pem -noout -text

打印证书的过期时间

openssl x509 -in signed.crt -noout -dates

打印出证书的系列号

openssl x509 -in cert.pem -noout -serial

打印出证书的拥有者名字

openssl x509 -in cert.pem -noout -subject

以RFC2253规定的格式打印出证书的拥有者名字

openssl x509 -in cert.pem -noout -subject -nameopt RFC2253

在支持UTF8的终端一行过打印出证书的拥有者名字

openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb

打印出证书的MD5特征参数

openssl x509 -in cert.pem -noout -fingerprint

打印出证书的SHA特征参数

openssl x509 -sha1 -in cert.pem -noout -fingerprint

把PEM格式的证书转化成DER格式

openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER

把一个证书转化成CSR

openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem

给一个CSR进行处理,颁发字签名证书,增加CA扩展项

openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem

给一个CSR签名,增加用户证书扩展项

openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial

查看csr文件细节:

openssl req -in my.csr -noout -text