openssl的用法

先说说加密。

加密分为对称性、非对称性两种。

对称性:双方都用一份加密的密钥。相当于A,B都有一个相同的钥匙。

非对称性:密钥有2个----公钥、私钥,都可以加密、解密。B先把公钥发给A,A用公钥加密,B再用私钥解密。

常用的对称性加密算法:DES,DES3,RC4,RC5,加密速度快,但是相对不安全,密钥在传输过程会被截获

非对称性加密算法:RSA 加密速度相对慢

话说ssh就是用RSA生成的id.rsa,id.pub

但是一般情况下会用混合加密的,兼顾以上2中算法的特点

混合加密:先用对称算法,得到一个密钥,把数据用此密钥加密,再把这个密钥用一个公钥加密,传给对方。对方先用自己的私钥解密,得到密钥,然后用这个密钥解密数据。

数据传输:公钥加密,私钥解密

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

公钥可以给别人,但是私钥一定要自己保管。

数字签名:把一个文件,用私钥加密后,传给对方,对方用我的公钥解密,如果能解开,则证明文件是我传的。

虽然可以保证文件是我发出的,但不能保证文件的完整性。可能别人中途篡改了文件内容。这就需要数字安全签名。

数字安全签名:把文件加上完整性检查,防止中途篡改文件内容。一般是文件用哈希算法(md5,sha1)计算,

figo@figo:~$ openssl dgst -md5 info
MD5(info)= 1374a02bc0909f8f25cd1c41439dd207

得到一个哈希值,俗称校验和(checksum)。把这个校验和一并加密送给对方,对方用我的公钥解密后,计算这个文件的哈希值,

figo@figo:~$ md5sum info
1374a02bc0909f8f25cd1c41439dd207  info

如果计算出来的这个值跟我传的一样,则证明这是我传的,且没有被篡改过的文件。

中间人攻击:但是如果A,B中间有一个黑客C,当A向B发文件时,会请求B的公钥,用于加密。这是黑客C截获了B的公钥,并且伪造了一个B的公钥B'给了A,A无法知道这个B'就是B的公钥。所以就会用B'加密信息发给B,这时C又截获了这个数据,利用自己的B'私钥,解密了数据,然后再用之前截获的B的公钥加密,把数据发给B,当然C篡不篡改数据完全自己说了算,因为B可以解密数据,并且校验和也正确,就确定这个数据就是A发过来的。整个过程对A,B是透明的。

为了防止中间人攻击,就要保证每个人的公钥就是每个人发出的。这样就出现了认证机构(CA Certificate Authority)

CA:是一个大家都信赖的机构,专门来管理大家的公钥。也就是说,只要B的公钥是是CA认证的公钥,我就认为这肯定是B的。之前说了,这个CA就是管理大家公钥的,所以我信任它,就要把我的公钥交给它保管。好吧,那我就向CA申请,请你管理我的公钥。那就填一个申请吧。比如我叫figo

openssl req -newkey rsa:4096 -nodes -sha256 -keyout figo.key -out figo.csr

这样就生成了我的私钥figo.key,跟一个证书请求文件figo.csr,其实这个证书请求文件里就包含你的公钥了。

把这个申请文件发给CA吧。CA拿到这个文件以后,要处理一下:

首先CA要有一个公钥跟私钥,用自己的私钥给figo.csr(我的公钥)文件加密,生成了一个经过CA认证的数字签名文件figo.crt好了,现在你的公钥已经被认证为figo.crt了,我把自己的证书下载到我本地,那以后谁需要我的公钥,我就把证书发给他,他自己CA认证吧。

现在B要访问我了,好吧,如果B想用https加密数据,那我就把证书(figo.crt)发给你吧,B去拿CA的公钥,拿到以后就可以开锁了(figo.crt + CA的公钥 = figo的公钥),开锁以后就拿到了我的公钥。主流的浏览器都记录了大部分CA的地址,遇到https协议的时候会主动去找证书并下载。如果很不幸,这个证书不是任何一家CA发出的,这时浏览器会提醒你:



CA服务器需要这样操作,把figo.csr,也就是我的公钥的请求文件,用自己的私钥ca.key,跟自己的认证证书处理一下,生成我的数字签名证书:figo.crt

openssl ca -in figo.csr \

-out figo.crt \

-cert ca.crt \

-keyfile ca.key \

-outdir .


搭建一个CA服务器

首先要生成一个公钥,私钥对

openssl req \
    -newkey rsa:4096 -nodes -sha256 -keyout ca.key \
    -x509 -days 365 -out ca.crt

然后建立一个目录

mkdir demoCA
cd demoCA
touch index.txt
echo '01' > serial
cd ..


最后注册别人的crs文件

openssl ca -in figo.csr \

-out figo.crt \

-cert ca.crt \

-keyfile ca.key \

-outdir .



下面讲一下openssl命令的用法

openssl version 看看版本

openssl ca 查看安装目录

当然主要功能是加密了,看看支持哪些加解密算法 openssl --help

有N多种加密算法,同学们可以自由选择

主要语法

des3 加密算法

-in inputfile 输入文件

-out outputfile 输出文件

-a 把加密后的文件转为base64

-d 解密

openssl des3 -k 123456 -salt -in info -out info.des3 -a

用des3算法加密,-k:密码是 123456,-salt 加一个盐值


也可以用哈希把一个文件打散,用dgst命令,里面支持md4,md5,sha,sha1,sha256,sha512,,rmd160等

openssl dgst -md5 fileName

用sha1签名一个文件

openssl sha1 -sign figo.key -out info.rsa info

验证签名

openssl sha1 -verify figo.pub -signature info.rsa info



根据私钥导出公钥

openssl rsa -in figo.key -passin pass:trousers -pubout -out figo.pub

用公钥加密、解密一个文件

openssl rsautl -encrypt -pubin -inkey figo.pub -in plain.txt -out cipher.txt

openssl rsautl -decrypt -inkey figo.key -in cipher.txt -out plain.txt 

用私钥加密解密一个文件

openssl rsautl -sign -inkey figo.key -in plain.txt -out signature.bin 

openssl rsautl -verify -pubin -inkey figo.pub -in signature.bin -out plain






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值