文章目录
- 1. 加密
- 对称密码
- 单向加密
- 公钥加密
- CA
- 应用
- 2. ssl
- 2.1 openssl
- 2.2 实现私有CA
- 2.2.1 生成一对密钥
- 2.2.2 生成自签署证书
- 2.2.3 实例
1. 加密
TCP/IP最初并没有考虑安全问题。
Alice–>Bob,这个通信过程面临以下问题:
- 机密性:明文传输
- 完整性:篡改
- 认证
对称密码
解决机密性问题,但通信对象多时,无法管理密钥。
单向加密
- 不可逆;
- 输入一样,输出也一样;
- 雪崩效应,输入有微小改变,输出会发生巨大改变;
- 定长输出
但不能防御中间人攻击(MITM):截获明文,修改明文,重新计算hash。对应措施是将数据加密,密钥交换可以使用Diffie-Hellman。
公钥加密
公钥可以从私钥中提取出来。
发送方用自己的私钥加密数据,实现身份验证;
发送方用接收方的公钥加密数据,保证机密性;
但速度慢,并不用来加密数据。公钥密码的主要作用是认证。
真正的场景是用来加密hash,实现认证。
CA
获取某人的公钥需要借助于第三方机构,如公安认证的PKI,其核心为证书颁发机构CA。第三方机构也有自己的公钥私钥,在证书上附加签名。这时会发现获取公钥及证书的过程陷入了循环 -_-|
两种pki:TLS;OpenGPG
证书的格式叫做x.509
证书的费用一年几千到上万。
支付宝、淘宝交易时的认证需要借助银行,如早期的U盾,里面保存了你的证书。
CA维护了一个CRL(Certificate Revocation List)。获取证书时,先验证CA,在验证CRL。
应用
_________________________________________________________
|对称加密数据 | |
| +-—————————+——————————————+ | 收方公钥加密的 |
| + 数据 + 私钥加密hash + | 对称密钥 |
| +——————————+——————————————+ | |
—————————————————————————————————————————————————————————
2. ssl
TLS/SSL使用了x.509格式;
https:443端口。
ssl是一个库,应用于传输层和应用层之间。
基于ssl的ftp叫做ftps;基于ssh的ftp叫做sftp。
目前使用的有SSLv1,SSLv2,TLSv1.
openssl是ssl的开源实现。它有三部分:
- libcrypto:加密库
- libssl:基于会话实现机密性、完整性和认证的TLS/SSL协议库
- openssl:多用途m命令行工具,实现私有CA
2.1 openssl
open开头的软件即开源。
openssl speed des
,可以测试加密速度。
openssl enc -des
,调用加密。
openssl dgst -sha1
,调用hash
openssl passwd -l
,生成用户密码
rsa
用于处理密钥;rsautl
可用来加密。
2.2 实现私有CA
如果想实现https服务器,就需要自己制作证书及CA。
- 生成一对密钥
- 生成自签署证书
2.2.1 生成一对密钥
openssl genrsa 2048
生成指定位数私钥(公钥由私钥生成),可重定向 或-out
;私钥应该加密存储,可指定参数。
(umask 077; openssl genrsa -out server2048.key 2048)
,括号表示命令组,它新开一个子shell。
openssl rsa -in server2038.key -pubout
,输出公钥。
2.2.2 生成自签署证书
openssl req -new -x509 -key server2048.key -out server.crt -days 365
,可申请有效期一年的x509证书。
openssl x509 -text -in server.crt
可查看整数。
/etc/pki/tls/openssl.cnf
有默认CA配置,根据这个配置文件,/etc/pki/CA
目录下应当有certs,newcerts,crl
3个子目录,还有index.txt,serial
文件。
2.2.3 实例
/etc/httpd
下创建ssl
目录,(umask 077; openssl genrsa -out httpd.key 1024)
openssl req -new -key httpd.key -out httpd.csr
, certificate signature request.
openssl ca -in httpd.csr -out httpd.crt -days 365
在/etc/pki/tls/certs
目录下有makefile
,可以make httpd.pem
生成测试私钥文件。注意,只是测试使用。makefile
根据后缀判断文件类型。