您的位置:首页 > 运维架构

openssl 加密机制 CA签证

2013-08-24 20:33 225 查看
对称加密
建立在双方互相信任的基础上,密钥只有一种,只有在拥有密钥的前提下才能解密数据。没有密钥,别人无法看到解密后的数据。非对称加密
先手动生成一对密钥,公钥和私钥,公钥可以被任何人拥有,私钥一般只有自己保存,公钥发布出去,自己用私钥加密后的数据文件被获取了公钥的另一方获取,就可以解密数据文件。一般用于,身份验证,让自己授权的一些人查看自己用私钥机密的数据,或者让对方用自己的公钥加密后的文件自己用私钥可以查看。单向加密
验证数据的完整性,一般用于数字签名。
对数据单向加密,生成特征码,用来验证数据的完整性。数据发生微笑的变化,就会引发雪崩效应,从而能够确认数据是否完整。
目前的数字签名是建立在公共密钥体制基础上,它是公用密钥加密技术的另一类应用。它的主要方式是,报文的发送方从报文文本中生成一个128位的散列值(或报文摘要)。发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。然后,这个数字签名将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先从接收到的原始报文中计算出128位的散列值(或报文摘要),接着再用发送方的公用密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。
加密过程的理解
自己生成一对密钥,将公钥发不出去,对方要对我发送邮件,用我发布的公钥对文件加密,他在加密的时候要想实现非对称加密,就不能用单向加密的手段,这是由加密的命令决定的,enc实现非对称加密,必须有密钥才能对文件加密,dgst不需要密钥,对方可以在对文件非对称加密后,再进行单向加密,当他发送邮件的时候,将单向加密生成的特征码和邮件的原件一同发送过来,我可以对原件单向加密,提取特征码后,与发送方发送过来的特征码做比对,来验证原件的完整性。然后用私钥对原件解密。
整个过程需要注意的是,单向加密只是来实现验证原件的完整性用的,而非对称加密是身份验证,验证通过,你就可以打开文件。密钥和密码的区别
密钥都是随机生成的,是解锁文件的直接工具,密码在解锁文件的时候,背后其实是很复杂的。我们在给文件设置密码的时候,系统利用加密算法,将密码转换成密钥的形式保存,我们利用密码解锁,同样需要加密算法将密码转化成密钥,与系统中的密钥匹配。
利用对称加密或者非对称加密的时候,会提示输入密码,然后程序会通过算法将密码转换成密钥,若是对称加密算法,就直接用密钥给文件加密,若是非对称加密算法,就从密钥中提取公钥再给文件加密。
单向加密中,可以理解为没有密钥和密码,给文件加密后,文件内容转化成特征码,通过与再次对文件单向加密生成的特征码比对可以用来验证文件的完整性。
我想,对于一些登录密码而言,系统会将密码转换成密钥的形式,若是对称加密,直接与系统密钥文件中存在的密钥比对,若吻合就会验证成功;若是非对称加密,则从密钥中提私钥,用私钥解密。
而若是一些直接使用密钥来通过的关卡,例如在网络上下载的一些软件,经常会提示我们输入密钥,这些程序中,省略了那些算法,直接使用密钥解密。
也就是说,密钥才是解密软件的直接钥匙,密码是需要被算法转化成密钥才可以使用的。
利用密钥解密不需要用到算法,利用密码解密就必须通过算法才能实现了。公钥和私钥
私钥可以随机生成,
openssl----开源安全套阶层协议
为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
SSL是Secure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。
OpenSSL:
libcrypto: 加密、解密
libssl: 实现ssl
httpd--apache WEB服务器中有模块mod_ssl,依赖libssl,实现ssl。
openssl:

openssl
enc ---------实现对称加密和非对称加密,子命令加密
-d 解密
-e 加密 encript(加密)
-des3 算法
-in 指定文件
-out 加密后的文件
dgst -----------实现单向加密---雪崩效应
-c 显示为两个组成部分
-d 显示debug信息
-hex 显示十六进制信息
-hmac
-mac alg 显示信息认证码,实现信息完整性
-md5 算法
rsautl -------------- 可以实现利用公钥加密,利用私钥解密
-in filename
指定输入文件名。缺省为标准输入。
-out filename
指定输入文件名, 缺省为标准输出。
-inkey file
指定我们的私有密钥文件, 格式必须是 RSA 私有密钥文件。
-pubin
指定我们的公共密钥文件。说真的我还真不知道 RSA 的公共密钥文件有什么用,一般公共密钥都是放在证书里面的。
-certin
指定我们的证书文件了。
-sign
给输入的数据签名。需要我们的私有密钥文件。
-verify
对输入的数据进行验证。
-encrypt
用我们的公共密钥对输入的数据进行加密。
-decrypt
用 RSA 的私有密钥对输入的数据进行解密。
-pkcs, -oaep, -ssl, -raw
采用的填充模式, 上述四个值分别代表: PKCS#1.5( 缺省值 ), PKCS#1 OAEP, SSLv2 里面特定的填充模式,或者不填充。如果要签名,只有 -pkcs 和 -raw 可以使用 .
-hexdump
用十六进制输出数据。
-asn1parse
对输出的数据进行 ASN1 分析。看看指令 asn1parse 吧。该指令一般和 -verify 一起用的时候威力大。
本指令加密数据的时候只能加密少量数据,要加密大量数据,估计要调 API. 我也没试过写 RSA 加密解密的程序来玩。
举例时间:
用私有密钥对某文件签名:
openssl rsautl -sign -in file -inkey key.pem -out sig
注意哦, 文件真的不能太大, 这个不能太大意思是必须很小。
文件大小最好不要大过 73 。绝对不能多过 150 ,多了就会出错。
这个工具真是用来玩的
# openssl rsautl -encrypt -in passwd -inkey pub.key -pubin -out passwd1(-inkey必须写,否则会报错)
# openssl rsautl -decrypt -in passwd1 -inkey test.key -out passwd2 # openssl version
# openssl enc -des3 -in /path/to/somefile -e -out /path/to/somefile.des3
使用这个命令会提示输入密码,可以将这个密码理解为非对称加密的密钥,通过des3算法将密码转化成一对密钥,用公钥给文件加密。
# openssl enc -des3 -in /path/to/somefile.des3 -d -out /path/to/somefile
使用这个命令会提示输入密码,可以将这个密码理解为非对称加密的密钥,通过des3算法将密码转化成一对密钥,用私钥给文件解密。
# openssl dgst -md5 -hex fstab.txt---单向加密,获取特征码
# md5sum fstab.txt---同上
# sha1sum fstab.txt----计算特征码
# openssl dgst -sha1 fstab.txt---同上
# md5sum # openssl speed ----测试当前主机加密算法的速度
# openssl speed des 测试des算法的速度
# man sslpasswd
# openssl passwd -1 -salt 12345678
rand---库调用,生成随机数
-hex 输出16进制数
-base64 编码
# openssl rand -base64 num ----- 生成随机数,随机数为num的2倍
# openssl rand -hex num
# openssl passwd -1 -salt `openssl rand -hex 4`-------为随机生成的八位字符单向加密,提取特征码
生成私钥:
# openssl genrsa----生成一个rsa格式的私钥--generate生成
# openssl genrsa num-----指定生成多少位的私钥
# openssl genrsa 2^n > /path/to/keyfile-----将生成的私钥定向到文件
# openssl genrsa -out /path/to/keyfile 2^n
# openssl genrsa -des3 2048 ---生成一个2048为的加密私钥
# (umask 077; openssl genrsa -out /root/mykey2.pri 2048)----加括号只对子shell有效,对当前shell无效
提取公钥:
# openssl rsa -in /path/to/keyfile -pubout

umask 允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这一数字的最 大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来 说,umask中各个数字最大可以到7。所以,创建文件的最大权限权限是666,目录则是777.


如何申请证书

ca证书中的内容:拥有着自身的属性信息,公钥,用户实体的名称,id号,ca的签名,核心是公钥。验证证书合法性的时候用的是用户实体名称。
1 ,生成一个私钥
2、制作一个证书签署请求;
req-----证书签署请求和生成工具
req - PKCS#10 certificate request and certificate generating utility.
-inform 有两种格式 PEM和DER,PEM比DER有更多的功能,却只是用来测试,很少用到。
-in 指定从哪个文件中读取
-key 表示私钥文件所在
-new 制作证书申请
-days num 期望使用期限
# openssl req -new -key /path/to/private_key -out /paht/to/certificate.csr (csr:crtificate sign request证书签署请求)提取自己的公钥附加上个人信息做成。
3、由CA负责签署证书;

openssl的配置文件




如何自建CA:
# cd /etc/pki/CA/
1、为CA生成一个私钥:
# (umask 077; openssl genrsa -out private/cakey.pem 2048)
2、生成自签证书:
# openssl req -new -x509(指定证书格式,说明自签,有,说明是自签,没有,是制作申请) -key private/cakey.pem -out cacert.pem -days 3650
# touch index.txt serial
# echo 01 > serial
3、签署证书:
# openssl ca -in /path/to/certreq.csr -out /path/to/certfile.crt(证书文件都以crt结尾) -days 365
是一个数字签名的过程
数字签名:发送方使用单向取得数据特征码,并使用自己的私钥加密此段特征码的操作;保证这是自己的东西,是独一无二的。专用客户端测试工具:
# openssl s_client -connect HOST:PORT(哪个服务器哪个端口测试) -CAfile(CA文件所在) /path/to/cacertfile|-CApath(CA路径) /paht/to/cacertfiles_dir/ -ssl2|-ssl3|-tls1 (协议版本)-state 显示状态openssl中有如下后缀名的文件
.key格式:私有的密钥
.crt格式:证书文件,certificate的缩写
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crl格式:证书吊销列表,Certificate Revocation List的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

常用证书协议
x509v3: IETF的证书标准
x.500:目录的标准
SCEP: 简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的
PKCS#7: 是封装数据的标准,可以放置证书和一些请求信息
PKCS#10: 用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据
PKCS#12: 用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,CISCO放在NVRAM中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx
自建CA,颁发证书,并使用证书,过程详解第一步:自建CA
打开文件,可以看到CA目录下都需要哪些文件和目录,注意,给CA创建的私钥文件名称必须是cakey.pem,而CA证书的名字也必须为cacert.perm,或者修改了配置文件中定义的目录和文件,否则,创建给别人签证的时候会报错。
为CA生成私钥Umask 077 定义了私钥文件的权限,不让其他用户访问。
CA证书生成成功,以上缩写的内容,申请证书者申请的时候,填写前五项必须与之保持一致,第六项是申请者建立网站时候的网址名称,莫要填错。
创建出必要文件,index.txt是数据文件,serial是CA颁发证书的序列号。
-------------注意,这里的01不能写成1,否则也会报错。
CA给自己颁发证书,序列号为1.至此,CA自建证书完毕。第二步:配置web网站,新建虚拟主机
安装web服务应用程序包这里以虚拟主机为例,配置一台虚拟主机。首先在主配置文件/etc/httpd/conf/httpd.conf中注释掉主服务器的DocumentRoot “/var/www/html”然后新建虚拟主机
在index.html中随便写上一段话,这是网站的首页。
然后在物理机hosts文件中配置解析

目录下边有个hosts文件

然后就可以在浏览器里搜索www.a.com了。不过这里可能会遇到问题,我就遇到了一个很让人头疼的问题,浏览器死活连接不上,原因可能是防火墙的问题,这时就需要关掉防火墙了。
好了,虚拟web主机建好了,下面开始建opensslOpenssl除了可以实现自签证书,还可以为web服务器提供ssl服务。Ssl服务对于ip是一对一的,有一个虚拟主机,就可以配置一个ssl服务。
第三步:Ssl服务的配置安装mod_ssl模块
Ssl服务的配置文件/etc/httpd/conf.d/ssl.conf在编辑ssl配置文件之前,要先为web服务器颁发一个证书。Web服务器自己生成一个证书请求
让CA为它颁发证书,注意,由于笔者是在同一台电脑上配置的,本机就是CA机关,所以,直接在/etc/httpd/目录下为web服务器颁发ca证书,如果不是在同一台主机,还需要web服务器向CA发送申请,由CA为其签署。签证
编辑配置文件
需要修改的配置:
至此,一切配置告终,下面由另一台客户机访问web服务器站点:www.a.com步骤:1,下载CA发布的CA自己的证书,然后安装。以CA做了一个ftp服务器为例,客户机下载


将证书下载下来后,右键连接另存为同时修改格式为cacert.crt2,安装证书

CA的证书

选择受信任的证书颁发机构

选是,导入证书成功。3,访问CA签过证书的网站www.web.com







到此,验证了,这个 网站的证书确实是CA机构给颁发的,是受信任的站点,接下来的操作都是经过加密的,有一定的安全机制在里面,可以放心做各种操作了。

本文出自 “天亮了” 博客,请务必保留此出处http://luliming.blog.51cto.com/7520243/1275793
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: