openssl详解及实现https
OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
秘钥算法和协议:
-
对称加密:
加密和解密使用同一个密钥,原始数据分成固定大小块,算法不同
秘钥过多,秘钥分发困难
DES,3DES AES Blowfish Twofish IDEA RC6 CAST5 -
公钥加密:
分公钥与私钥
公钥:从私钥中提取产生,可公开给所有人;pubkey
私钥:通过工具创建,使用者自己留存保证其私密性;secret key
数字签名:(私钥加密的特征码)接受方确认发送方身份
秘要交换:发送方用对方公钥加密一个对称秘钥 发送给对方
数据加密:不常用公钥进行数据加密 慢,RSA,DSA发送方:
接收方:
-
用自己的私钥解密对称秘钥
-
用对称秘钥解密整段数据–保密性
-
用发送方的公钥解密特征码–验证发送方身份
-
计算特征码与接收的特征码作比较–保证数据完整性
可能出现中间人。要可靠的拿到对方公钥:CA -
计算数据的特征码
-
用自己的私钥加密这段特征码
-
生成临时对称秘钥(一次性),用其加密整段数据(包括加密的特征码)
-
用接收方的公钥加密临时对称秘钥附加在数据后
-
单向加密:
提取数据指纹,只能加密不能解密
定长输出,雪崩效应
保证数据完整性
算法: md5 固定128位输出
sha1 160,224,256,384,512
秘要交换:公钥交换
DH:利用 已知大质数的高次方的结果 反求次方极难
协商生成p,g 本机生成x,将 p^x%g 的结果发送
接收方本机生成y 求 (p^x%g)^y 对方 (p^y%g)x 结果相同
RSA ECDH ECDHE
PKI: Public Key Infrastructure
-
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库:
X.509:定义了证书的结构以及认证协议标准
-
版本号
序列号
签名算法
颁发者
有效期限
主体名称
主体公钥
CRL分发点
扩展信息
发行者签名
SSL: Secure Socket Layer
TLS: Transport Layer Security
数据保密性
数据完整性
安全验证
OpenSSL:开源项目,三个组件
-
openssl: 多用途的命令行工具
-
libcrypto: 加密算法库
-
libssl:加密模块应用库,实现了ssl及tls
# openssl
标准命令,消息摘要命令,加密命令
openssl enc
-e:加密
-d:解密
-a:文本编码格式
-salt:盐
-in:要处理的文件
-out:要输出的文件
]# openssl enc -e -rc4 -a -salt -in fstab -out fstab.en 加密
单向加密:计算特征码
openssl dgst - FILE
md2 md4 md5 rmd160 sha sha1
]# md5sum FILE
]# openssl dgst -md5 FILE md5加密
生成用户密码:
openssl passwd -1 -salt SALT
生成随机数:
openssl rand [base64|hex] #
base64:
hex:16进制编码
#:长度
]# openssl rand -base64 10 使用时去掉尾部两个“==”
GyA/hYBNH20RAQ==
https:http+openssl
环境:
Web:CentOS 6.8,10.1.235.6
CA:CentOS 7,10.1.235.7
关闭防火墙及selinux
CentOS 7,10.1.235.7:
建立私有CA:
生成私钥:指定位置
]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
生成字签证书:
]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
-new:生成新证书签署请求
-x509:生成自签格式证书,用于创建私有CA,其它情况不加
-key:生成请求时用到的私钥路径
-out:生成的请求文件路径,若自签操作将直接生成签署过的证书
-days:证书的有效时长
...
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Class
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:www.zjj.com
Email Address []:
创建所需文件:
]# touch /etc/pki/CA/{serial,index.txt}
]# echo 01 > /etc/pki/CA/serial
CentOS 6.8,10.1.235.6:
安装配置http服务:
安装http及mod_ssl模块
]# yum install httpd mod_ssl
]# vi /etc/httpd/conf/httpd.conf
#ServerName www.example.com:80
取消注释更改 ServerName www.zjj.com:80
DocumentRoot "/var/www/html"
注释该行 #DocumentRoot "/var/www/html"
保存退出
生成证书请求:
]# mkdir /etc/httpd/ssl
]# cd /etc/httpd/ssl
生成私钥:
]# (umask 077;openssl genrsa -out httpd.key 2048)
生成证书请求:
]# openssl req -new -key httpd.key -out httpd.csr
...填入相关内容
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Class
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:www.eva.com
Email Address []:
...
将请求发送至CA主机:
]# scp ../ssl/httpd.csr 10.1.235.7:/
在CA主机上签署:CentOS 7,10.1.235.54
]# openssl ca -in httpd.csr -out httpd.crt -days 365
将证书发送至Web主机
]# scp httpd.crt 10.1.235.6:/etc/httpd/ssl
Web主机配置ssl,找到以下两行,更改对应的证书及私钥文件:
]# vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
在虚拟主机标签内添加:
Documentroot /virtual
<Directory /virtual>
Options None
AllowOverRide None
</Directory>
]# mkdir /vitual
]# vi /virtual/index.html 创建首页文件
<center>https from 10.1.235.6</center>
测试:
在/etc/hosts文件中添加一条域名解析
10.1.235.6 www.eva.com
可以在Cent 7上指定证书访问:未指定证书访问https会报错
]# curl --cacert /etc/pki/CA/cacert.pem https://www.eva.com
<center>https from 10.1.235.6</center>
windows中可以将证书导入为受信任的根证书
原创文章,作者:Jasper,如若转载,请注明出处:http://www.178linux.com/53536