加解密基础及openssl命令

加密算法和协议:

  1. 对称加密:
    。加解密使用同一个密钥;将数据分割成固定大小的块,逐块加密;且块与块之间有关联关系;
    。算法:DES,3DES,AES,Blowfish,Twofish,IDEA,RC6,CAST5
    。缺陷:密钥过多;密钥分发成为难题;

2.公钥加密:
。密钥分为公钥和私钥;
。公钥:从私钥中提取产生;可公开给所有人;pubkey
。私钥:通过工具创建,使用者自己保留,必须保证其私密性;secret key
。用公钥加密的数据,只能用与之配对的私钥解密;私钥加密的数据,只能用与之配对的公钥解密;
。用途:
(1)数字签名:确认发送方的身份;
(2)密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方;
。算法:RSA,DSA,ELGamal

3.单向加密:
。提取数据指纹;只能加密,不能解密;
。定长输出;雪崩效应
。作用:数据完整性验证;
。算法:md5(128bits),sha1(160bits),sha224,sha256,sha384,sha512

4.密钥交换:
(1)公钥加密:
(2)DH算法(Deffie-Hellman):

DH算法:
A与B要交换密钥:
A-->p,g;B-->p,g(p,g为大素数)
A-->x;B-->y
A:px%g-->B==>(px%g)^y
B:py%g-->A==>(py%g)^x
密钥:(px%g)y=(py%g)x

Bob和Alice安全通信过程:

。加密:
(1)A生成数据,用单向加密提取数据特征码;
(2)用A的私钥加密特征码(加密后的特征码就叫做数字签名);
(3)A生成临时对称加密钥,加密数据及特征码;
(4)获取B的公钥加密临时对称密钥;并附加在最后面;

。解密:
(1)B用自己的私钥解密对称密钥;并用它来解密获得数据和特征码;(保密性)
(2)用A的公钥解密特征码;能解密,身份认证;
(3)B用同样的单向加密算法提取数据特征码;并对比解密后的特征码;如相同,数据完整性验证;

上述过程中,存在巨大问题:如何可靠的获取对方的公钥?

PKI(Public Key Infrastructure)

  • 公钥基础设施:
    。签证机构:CA
    。注册机构:RA
    。证书吊销列表:CRL
    。证书存取库:

  • x509V3定义了证书的结构和认证协议标准:
    。协议版本号:v1;v2;v3
    。序列号:证书的编号;
    。签名算法ID:
    。发行者的名称:CA的名字
    。证书有效期:
    。主体名称:
    。主体公钥:
    。发行者的唯一标识:
    。主体的唯一标识:
    。扩展信息:
    。发行者的签名:

  • 协议:

(1)SSL:Secure Socket Layer
。NetScape公司研发;版本:v1/2/3

(2)TLS:Transport Layer Security
。IETF研发;版本:v1.0/1.1/1.2/1.3

  • ssl,tls的开源实现:openssl

SSL Handshake Protocol

  • 第一阶段:
    Client Hello:要进行加密通信
    。支持的协议版本;tls1.1,tls1.2...
    。客户端生成一个随机数,用于稍后生成“对称密钥”;
    。支持的加密算法;比如:AES,RSA...
    。支持的压缩算法;

  • 第二阶段:
    Server Hello:
    。确定使用的加密通信协议版本;
    。服务器生成一个随机数,用于稍后生成“对称密钥”;
    。确定使用的加密算法
    。发送自己的证书(CA颁发的公钥文件)

  • 第三阶段:
    Client:
    。验证Server证书(发证机构,证书完整性,证书持有者,证书有效期,吊销列表);在确认无误后提取Server的公钥;

发送以下信息给Server:
。发送一个随机数给Server;
。编码变更通知(表示随后的信息都将用双方商定的加密方法和密钥发送)
。客户端握手结束通知;

  • 第四阶段:
    Server:
    。接受到客户端发来的第三个随机数(pre-master-key)后,计算生成“对称密钥”;

发送以下信息给Clinet:
。编码变更通知;
。服务器握手结束通知;

openssl:

  • 组件:libcrypto,libssl,openssl

  • openssl多用途命令行工具:
    有众多自命令;分三类:
    。标准命令;
    。消息摘要命令(dgst子命令)
    。加密命令:enc,ca,req,genrsa...

  • 对称加密:
    。工具:openssl enc
    。支持的算法:3des,aes,blowfish,twofish...
    加密:openssl enc -e -des3 -a -salt -in /path/from/somefile -out /path/to/somefile
    解密:openssl enc -d -des3 -a -salt -out /path/to/somefile -in /path/to/somefile

  • 单向加密:
    。工具:openssl dgst {md5sum,sha1sum,sha512sum...}
    openssl dgst -md5 /path/from/somefile
    。生成用户密码:openssl passwd
    openssl passwd -1 -salt RANDOM
    。生成随机数:
    工具:openssl rand
    openssl rand -hex NUM
    openssl rand -base64 NUM

注意:生成用户密码可简写为:openssl passwd -1 -salt $(openssl rand -hex 4)
。linux系统上的随机数生成器:
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞;
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;(伪随机数,不安全)
熵池中随机数的来源:
(1)硬盘IO中断时间间隔
(2)键盘IO中断时间间隔

  • 公钥加密:
    作用:
    1.加解密;算法:RSA,ELGamal;工具:openssl rsautl
    2.数字签名:算法:RSA,ELGamal;工具:openssl rsautl
    3.密钥交换:DH算法

    。生成私钥:
    (umask 077;openssl genrsa -out /path/to/somefile 1024) ##此处 的数字1024为2^n;
    。提取公钥:
    openssl rsa -in /path/to/私钥文件 -pubout -out xxx.pub

建立私有CA:

。工具:openssl
。openssl配置文件:/etc/pki/tls/openssl.cnf

vim /etc/pki/tls/openssl.cnf
[ ca ]
default_ca  = CA_default        # The default ca section

####################################################################
[ CA_default ]

dir     = /etc/pki/CA       # Where everything is kept ##工作目录
certs       = $dir/certs        # Where the issued certs are kept ##已经签发的证书存放的目录
crl_dir     = $dir/crl      # Where the issued crl are kept##吊销的证书位置
database    = $dir/index.txt    # database index file.##数据库;已经颁发的所有证书列表
#unique_subject = no            # Set to 'no' to allow creation of
                    # several ctificates with same subject.
new_certs_dir   = $dir/newcerts     # default place for new certs.

certificate = $dir/cacert.pem   # The CA certificate##CA自签证书
serial      = $dir/serial       # The current serial number##证书序列号
crlnumber   = $dir/crlnumber    # the current crl number
                    # must be commented out to leave a V1 CRL
crl     = $dir/crl.pem      # The current CRL
private_key = $dir/private/cakey.pem# The private key ##CA的私钥
RANDFILE    = $dir/private/.rand    # private random number file

x509_extensions = usr_cert      # The extentions to add to the cert

default_days    = 365           # how long to certify for##证书有效期
default_crl_days= 30            # how long before next CRL
default_md  = sha256        # use SHA-256 by defaultxxx
preserve    = no            # keep passed DN ordering

  • 在准备配置为CA的服务器上生成一个自签证书;并为CA提供需要的目录及文件;

1.生成私钥:
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

2.生成自签证书:

[root@localhost ~]# openssl req -x509 -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
//-new:生成新证书
//-x509:生成自签证书;CA服务器专用
//-key:指明私钥文件的路径
//-out:生成的请求文件路径;如果自签将直接生成签署过的证书

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:shanghai
Locality Name (eg, city) [Default City]:shanghai
Organization Name (eg, company) [Default Company Ltd]:ops
Organizational Unit Name (eg, section) []:magedu
Common Name (eg, your name or your server's hostname) []:www.magedu.com
Email Address []:acadmin.magedu.com

3.为CA提供所需的目录及文件:
mkdir /etc/pki/CA/{certs,crl,newcerts}
touch /etc/pki/CA/{serial,index.txt}
echo 01 > /etc/pki/CA/serial

要用到证书进行安全通信的主机,要向CA服务器请求签署证书:

以http服务为例:
(1)要用到证书的主机生成私钥:
mkidr /etc/httpd/ssl
cd /etc/httpd/ssl;(umask 077;openssl genrsa -out httpd.key 2048)
(2)生成证书签署请求:
openssl req -new -key /etc/httpd/ssl/httpd.key -out httpd.csr -days 365
(3)将httpd.csr通过有效途径发送给CA服务器(scp)
(4)在CA服务器上签署证书:
openssl ca -in xxx/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
(5)将httpd.crt通过有效途径发送给请求证书的主机:
scp httpd.crt root@172.16.18.130:/etc/httpd/ssl

  • 查看证书信息:
    cd /etc/pki/CA/certs/;openssl x509 -in httpd.crt -noout -serial -subject serial=01 subject= /C=cn/ST=shanghai/O=magedu/OU=ops/CN=www.magedu.com/emailAddress=webadmin@magedu.com
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • CA和证书安全协议(SSL/TLS)OpenSSH 一、CA和证书 (一) PKI(Public Key Infr...
    哈喽别样阅读 1,352评论 0 0
  • 似乎不管看什么书,最后都会走上查据考证这条路。 举个最近看到的例子,西安是十一朝古都?还是十三朝古都?常识上普遍认...
    王家人宁阅读 394评论 0 0
  • 玲异奋作者 2017.08.12 15:40 打开App 最后是今天老师要求的作业 1,高血压的危害 答:高血压对...
    异玲奋阅读 269评论 0 1
  • 你在自己的故事里流汗, 凉风在它的故事里乘凉。 你想乘凉, 凉风不想流汗……
    小剧在成长阅读 180评论 0 6
  • 一年前开始在简书写字,记录自己在生活中的所见所闻、所思所思,这里面有快乐、有悲伤、有感动、有顿悟。 我从未写出过称...
    宋宋的白银时代阅读 2,111评论 13 123