首页 > 代码库 > OpenSSL的相关知识及应用

OpenSSL的相关知识及应用

OpenSSL简介

SSL是Secure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准,目前已有3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。


SSL是一种为那些明文应用提供加密机制的协议,OpenSSL是对SSL协议的实现,当然还实现了其他很多东西,并且是open source,虽然Openssl作为SSL的一个库,但就其自身功能也是相当强大的。


OpenSSL有两种运行模式:交互模式和批处理模式。

直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处理模式。


OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。 


1.对称加密算法 

OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。 


2.非对称加密算法 

OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。 


3.信息摘要算法 

OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。 


4.密钥和证书管理 

密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。 


首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。 


在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。 


事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。

OpenSSL的组成

libcrypto:通用功能的加密库


libssl:用于实现TLX/SSL的功能


openssl:多功能命令工具,用于生成密钥,创建数字证书,手动加密解密数据

SSL协议的特性

SSL协议在应用层协议通信之前(SSL的工作区域是在应用层与传输层之间增加了半个层,原因是有些协议是不需要加密的)就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。通过以上叙述,SSL协议提供的安全信道有以下三个特性:


  1、数据的保密性


 信息加密就是把明文文件利用加密算法转换成密文的文件以实现数据的保密。加密的过程需要用到私匙来加密数据然后再通过公钥解密,虽然公钥是公开的,但没有了私钥,就无法解开加密后的数据。数据加密之后,加密过的数据可以公开地传送。


  2、数据的一致性


 加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。


  3、身份认证


加密的另外一个用途是用来作为个人的认证,用户的公匙可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定,当对方接收到数据后,利用发送方的公钥进行解密后获取数据。(注:公钥是从私钥中提取出来的)

实际项目中配置SSL的术语解释

1,各种密钥和证书的文件格式说明

 JKS(Java KeyStore):java的密钥存储文件,二进制格式, 其中可包含公钥,私钥以及X509证书,

 是一种 Java 特定的密钥文件格式。

 PEM(Privacy Enhanced Mail):增强型私人邮件,文本格式,其中可包含公钥,私钥以及X509证书.它存储ASC头部包装的Base64编码DER格式的数据

 DER(Distinguished Encoding Rules):文本格式,也可包含公钥,私钥以及X509证书.是大多时的默认格式

 CER:DER编码的二进制格式

 CRT:文本格式,X509标准后缀名

 PFX文件,二进制.公钥加密技术12号标准

2,相关术语

 PKI(Public Key Infrastructure):公钥基础设施

 SSL:使用公开密钥体制和X509数字认证技术,是Netscape提出的最初基于Web的协议

  包含服务器认证,客户认证(可选),SSL链路完整及保密性

 缺点:不对应用层消息进行数字签名

 RSA公钥加密:非对称密码加密和解密

 证书:是一个把公钥和姓名(域名)绑定的协议.通俗的讲,是附上申请组织的资料,再加上数字签名后的公钥,

 一般包括:组织名;IP;公钥;到期日;CA组织名;序号;根CA签名(如veriSign)

 SSL握手:

 IE访问https站点>>确认WebServer是否有与SSL证书关联的密钥>>成功>>通信

 认证中心(CA Certificate Authority) 发放证书的可信任的第三方,用来签发证书的机构.每个认证中心都会有一个最高的认证中心(CA root)的签名

 最高认证中心:不会直接签发证书,而是授权给中间认证中心,是自签名的机构证书.事先就要知道最高认证中心的公钥

 SSL采用X509由上而下的金字塔式证书制度:

 CA.root

 CA认证中心…CA认证中心…

 用户证书…用户证书…用户证书…用户证书…

 GSKit

 由 WebSphere Webserver 插件和 IHS(IBM HTTP Server)使用的 IBM 的 SSL 的 C/C++ 实现。

 PKCS12

 PKCS 表示“公钥密码术标准”。PKCS12 是标准密钥文件格式

3,目前国内CA认证商收费标准(只咨询了这一家):

 天威诚信(根ca是veriSign)

 SSL 40位:5000元/年

 SSL128位:8000元/年

OpenSSL的应用

1)、Message Digest commands(信息摘要算法也可以叫单向加密算法)


单向加密的算法有:md2、md4、md5、rmd160、sha、sha1  


命令:


openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile


作用:用于实现在网络通信中保证所传输的数据完整性

[root@bogon ~]# openssl dgst -sha1 -out /a.cipher /a.txt

使用单向加密,算法sha1,输出文件为/a.cipher,源文件为/a.txt

[root@bogon ~]# ll /a.cipher 

-rw-r--r--. 1 root root 55 Dec  9 04:56 /a.cipher

2)、Cipher commands(对称加密)


  常用算法有:des、des3、base64等

[root@bogon ~]#openssl enc -base64 -a -salt -in /etc/passwd  -out /passwd.cipher

加密

[root@bogon ~]#openssl enc -d -base64 -a -salt -in /passwd.cipher  -out /passwd

解密

#-base64算法加密

#-d表示解密

#-a -salt表示加盐

#-in 对那个文件操作

#-out 输出到那里

注:


用户认证:公钥加密,私钥解密。


数字签名:私钥加密,公钥解密。

3)、证书(x509格式)

wKiom1SFvSuAssSvAAGDY4E4BRg562.jpg

OpenSSL构建私有CA

一、建立CA服务器

修改配置文件

# vim /etc/pki/tls/openssl.cnf


###################################

[ CA_default ]


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 //证书吊销列表号码


##########################################

创建目录和文件

# cd /etc/pki/CA


# mkdir certs newcerts crl


# touch index.txt serial


# echo 01 > serial //导入初始序列号


生成密钥

# (umsk 077; openssl genrsa -out private/cakey.pem 2048)


给自己颁发证书,自签名

# openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 365


国家名字:CN


省:


城市:


公司名字:XX


组织部门名称 :XXX


用户名字或服务器名字 :ca.baidu.com 要和使用的方法对应


邮件地址: XXX


二、客户端申请证书

在对应的配置文件目录下创建ssl目录,以vsftpd为例:

# mkdir /etc/vsftpd/ssl //创建ssl目录


# cd /etc/vsftpd/ssl


# (umask 077; openssl genrsa 1024 > vsftpd.key) //生成密钥


# openssl req -new -key vsftpd.key -out vsftpd.csr //生成请求


国家....

省....

….

密码 //加密密码


# scp vsftpd.csr root@192.168.56.101:/tmp //通过某种方式把请求传递给CA


三、CA签署证书

# openssl ca -in /tmp/vsftpd.csr -out /tmp/vsftpd.crt // 签署证书


# scp /tmp/vsftpd.crt root@192.168.56.102:/etc/vsftpd/ssl //把签署的证书传递给客户端


四、吊销证书

#openssl ca -revoke /path/to/file.crt


OpenSSL的相关知识及应用