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

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


[[email protected] ~]# openssl dgst -sha1 -out /a.cipher /a.txt

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

[[email protected] ~]# ll /a.cipher

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


2)、Cipher commands(对称加密)

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


[[email protected] ~]#openssl enc -base64 -a -salt -in /etc/passwd  -out /passwd.cipher

加密

[[email protected] ~]#openssl enc -d -base64 -a -salt -in /passwd.cipher  -out /passwd

解密

#-base64算法加密

#-d表示解密

#-a -salt表示加盐

#-in 对那个文件操作

#-out 输出到那里

注:

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

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


3)、证书(x509格式)

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 [email protected]:/tmp //通过某种方式把请求传递给CA

三、CA签署证书

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

# scp /tmp/vsftpd.crt [email protected]:/etc/vsftpd/ssl //把签署的证书传递给客户端

四、吊销证书

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

时间: 2024-10-24 04:19:02

OpenSSL的相关知识及应用的相关文章

python的list相关知识

关于list的相关知识 list01 = ['alex',12,65,'xiaodong',100,'chen',5] list02 = [67,7,'jinjiao_dawang','relax1949',53] #打印list01.list02 print(list01) print(list02) #列表截取.切片 print(list01[1]) print(list01[-2]) print(list01[1:3]) #列表重复 print(list01 * 3) #列表组合 prin

三层交换机相关知识

三层交换机相关知识 这次的作死之路又要开始了.这次的对象主要是交换机:还是三层的: 这是这次实验的总体用图: 现在现根据图上的标志:将所有的主机配置好:目前没有做任何vlan:所以PC1和PC3是能够互通的: 接下来:我想先去探索下三层交换机关闭portswitch会怎么样: 第一步:先关闭了再说: 因为按照图中的设计:PC1的帧如果想要到达PC2,那么就必然要经过LSW1.但是现在我关闭了g0/0/1端口的portswitch:现在pc1并不能ping通pc2: 通过百度:三层交换机的端口不仅

php学习day7--函数的相关知识

今天我们主要学了函数的相关知识,是个比较基础的知识,但也是很重要的. 一.函数 函数就类似于一个工具,我们写好函数之后可以直接进行调用,可以很大的减少代码的从用性,提高页面性能和可读性. 1.函数的定义 在php中函数的定义方式为: function  name($形参1,$形参2.....){ 要执行的代码 return  123: } 在上方的函数定义式中,name代表函数名,小括号内是形参,是用来传递参数,花括号中的就是调用时需要执行的代码. 函数的调用方式: name(实参1,实参2,.

svn常规操作与相关知识

Svn常规操作与相关知识 一.何谓版本控制 它是一种软件工程籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新,它透过文档控制记录程序各个模块的改动,并为每次改动编上序号,并且编辑错误之后还可以回溯到以前的版本 二.可供我们选择的版本控制系统 1.VCS  (本地版本控制) 2.VSS.CVS(集中版本控制) 3.ClearCase.SVN.Perforce.TFS(集中版本控制) 4.Mercurial(水银/水星).Git(分布式版本控制) 差异: 1.Git和其他版本控制系统的主要

黑马程序员---Objective-C基础学习---类、对象、方法相关知识笔记

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 类.对象.方法相关知识笔记 Objective-C相对于C语言有了面向对象的特性,但是ObjC又没有其他面向对象语言那么多语法特性,ObjC本身对面向对象进行了精简.下面是一些相关知识笔记. 类定义 成员变量 方法和属性 self关键字 类定义 在C#.Java等其他高级语言中定义一个类是相当简单点的,直接一个关键字class加一对大括号基本就完成了,但是在ObjC中类的定义相对变化比较大.现

深入浅出安卓学习相关知识,如何从零学好移动开发

原文发表自我的个人主页,欢迎大家访问 http://purplesword.info/mobile-develop 由于近几年来互联网的飞速发展,安卓和iOS平台的大量普及推广,移动开发在当前是非常热门的一个方向. 有不少同学问我如何学习安卓,要学些什么,难不难学.之前一直没有想好应该怎么回答这个问题,只是简单的说安卓自身门槛不高,并不难学.因为我觉得准确回答一个类似这样的问题往往需要灵感.现在根据我的学习体验,做个大概的总结. 1.我为什么学安卓 我从刚开始接触安卓开发到现在也有两三年的时间了

linux 服务器分区格式化相关知识 -mount

关于linux 系统mount和mkfs 的相关知识: 使用mount 1)  Mount的相关格式:mount [-t 文件类型][-o  选项] devicedir 详解: -t 文件类型,通常默认mount会自动选择正确的类型,通常类型ext2/ext3/ext4之类的. 常用的类型有:                  光盘或光盘镜像:iso9660 DOS fat16文件系统:msdos Windows 9x fat32文件系统:vfat Windows NT ntfs文件系统:ntf

【转载】前端面试“http全过程”将所有HTTP相关知识抛出来了...

原文:前端面试“http全过程”将所有HTTP相关知识抛出来了... 来一篇串通,一个http全过程的问题,把所有HTTP相关知识点都带过一遍 http全过程 输入域名(url)-->DNS映射为IP-->TCP三次握手-->HTTP请求-->HTTP响应-->(浏览器跟踪重定向地址)-->服务器处理请求-->服务器返回一个html响应-->(视情况决定释放TCP连接)-->客户端解析HTML-->获取嵌入在HTML中的对象重新发起http请求

Java的File类相关知识

Java的File 目录: 1.创建File的文件或者目录的方法.... 2.创建File对象的构造器的三种形式... 3.关于分割符的相关知识...................... 4.file简单Api介绍................................... 1.再说File的时候就不得不先说一下创建文件和目录的三个方法. <1>createNewFile()必须有已经创建好的路径,才能创建一个文件.返回值:如果指定的文件不存在并成功地创建,则返回 true:如果指