openssl+http实现https

openssl详解及实现https

OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

秘钥算法和协议:

  • 对称加密:
    加密和解密使用同一个密钥,原始数据分成固定大小块,算法不同
    秘钥过多,秘钥分发困难
    DES,3DES  AES  Blowfish  Twofish  IDEA  RC6 CAST5

  • 公钥加密:
       分公钥与私钥
           公钥:从私钥中提取产生,可公开给所有人;pubkey
           私钥:通过工具创建,使用者自己留存保证其私密性;secret key
       数字签名:(私钥加密的特征码)接受方确认发送方身份
       秘要交换:发送方用对方公钥加密一个对称秘钥 发送给对方
       数据加密:不常用公钥进行数据加密 慢,RSA,DSA

    发送方:

    接收方:

    1. 用自己的私钥解密对称秘钥

    2. 用对称秘钥解密整段数据–保密性

    3. 用发送方的公钥解密特征码–验证发送方身份

    4. 计算特征码与接收的特征码作比较–保证数据完整性
      可能出现中间人。要可靠的拿到对方公钥:CA

    1. 计算数据的特征码

    2. 用自己的私钥加密这段特征码

    3. 生成临时对称秘钥(一次性),用其加密整段数据(包括加密的特征码)

    4. 用接收方的公钥加密临时对称秘钥附加在数据后

  • 单向加密:
    提取数据指纹,只能加密不能解密
    定长输出,雪崩效应
    保证数据完整性
    算法: 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:
   hex16进制编码
   #:长度
]# 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 710.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

(0)
上一篇 2016-10-24 09:08
下一篇 2016-10-24 09:08

相关推荐

  • Shell中的循环语句

    在编程语言中,循环语句是最基本的语法之一,在Shell(这里是Bash)中也不例外。把相关内容整理一下吧。 这里包括for/while/until循环,以及变量自增的语法实例。 Shell(以Bash为例)中的循环语句一般有for、while、until这几种,偶尔还有写错语法的时候,这里结合实例来自己总结一下。也为今后使用提供一个快捷的资料获取渠道。 一、…

    Linux干货 2016-08-22
  • shell脚本总结

    shell脚本简要总结 脚本调试 bash -n /path/to/some_script检测脚本中的语法错误 bash -x /path/to/some_script调试执行 变量 环境变量 变量声明、赋值:export name=VALUEdeclare -x name=VALUE 变量引用:$name, ${name} 显示所有环境变量: export…

    Linux干货 2016-08-21
  • linux终端的类型与linux发展历史

    一、linux console的类型与说明 说明:        1 由于虚拟终端的实现,人们可以多用户多任务的在一台计算机操作系统上工作             2 在80或90年代的旧电脑上,人们只能用分屏这样的方法来实现多用户,多任务的工作  …

    Linux干货 2016-11-03
  • Nginx反向代理https,提供PhpMyAdmin

    准备工作:主机1、双网卡:外–172.16.252.187  内–192.168.42.140 主机2:192.168.42. 145 主机3:172.16.251.112 主机4:192.168.42.141 在主机2上:     安装httpd  yum  install…

    2017-07-01
  • 基于pxe部署系统

    一、前言 在生产环境中,我们经常遇到需要部署部署多台服务器。如果我们每部署一台服务器都要拿着系统盘到机房部署,守在服务器面前,那么我们的效率是十分低下的。况且有时候机房并不在我们身边。那么我们可以通过让机房值班人员为每台服务器配置好远程管理卡,运维人员通过远程管理卡,远程登入服务器进行操作。 二、pxe原理 pxe原理是通过服务器上网卡中支持的pxe启动,通…

    Linux干货 2015-09-14
  • 最简单的Linux系统——更加深入了解Linux启动过程

    自制一个最简单的Linux: 1、有一个新的磁盘,并创建分区 2、挂载分区,创建目录 3、拷贝内核文件 4、创建MBR和grub.conf文件 5、创建/etc/fstab文件,设置开机自动挂载 6、拷贝一个bash程序 7、卸载分区,以新磁盘重启系统

    Linux干货 2016-09-11