设为首页 收藏本站
查看: 337|回复: 0

[经验分享] OpenSSL详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-5-26 09:08:03 | 显示全部楼层 |阅读模式
原理:   

    SSL是SecureSocketLayer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape(网警)公司在推出第一个Web浏览器的同时,提出了SSL协议标准,目前已有3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。目前,利用公开密钥技术的SSL协议,已成为Internet上保密通讯的工业标准。安全套接层协议能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
AB通信身份认证过程   

   发送方步骤一:

       用单向加密的方法,生成特征码

   步骤二:

       发送方用自己的私钥加密特征码

   步骤三:

      生成一个临时的对称密钥,加密这整段数据

   步骤四:

       密钥交换: 自己生成一个密码用对方的公钥加密这个密码,从而使得只有对方可以解密

   接收方步骤一:

      接收方用自己的私钥解密,然后得到临时对称密钥的密码

   步骤二:

       用发送方的公钥解密得出数据特征码

   步骤三:

       然后用同样的单向加密算法计算出数据特征码进行比对,同时也可以验证数据的完整性

单向加密:

     功能:保证数据完整性,只能加密不能解密,提取数据指纹

      特性:定长输出、雪崩效应

算法:          md5 :128bitssha1:160bitssha224、sha256、sha384、sha512

用法:

提取/etc/inittab的特征码:

   ~]# openssl dgst -md5 /etc/inittab
    MD5(/etc/inittab)= 66a88d6c4d693170753ea3382f8bc150


查看/etc/inittab的特征码

   ~]# md5sum /etc/inittab     66a88d6c4d693170753ea3382f8bc150  /etc/inittab
公钥加密:

        功能:

                数字签名:主要在于让接收方确认发送方的身份

          密钥交换:发送方用对方公钥加密一个对称密钥,发送给对方

          数据加密:

算法:    RSA, DSA, ELGamal    DSS: Digital Signature Standard    DSA:Digital Signature Algorithm

用法:

生成私钥:

     ~]# (umask 077;  openssl  genrsa  -out  /etc/pki/CA/private/cakey.pem 1024)

提出公钥:

    ~]#  openssl  rsa  -in  /etc/pki/CA/private/cakey.pem  -pubout
对称加密:

    加密和解密使用同一个密钥

    特性:加密解密使用同一个秘钥,将原始数据分割成固定大小的块,逐个进行加密

     缺陷:

        1、密钥过多

        2、密钥分发困难

算法 DES:数据加密标准,已经寿终正寝 56位密钥 3DES:依然被广泛使用 AES:高级加密标准  128 192 256 384位密钥   Blowfish Twofish IDEA RC6 CAST5

用法加密实例:    将inittab这个文件用des3的加密算法加点盐,保存到当前目录叫inittab.des3     openssl enc -des3 -salt -a -in inittab -out inittab.des3 会让你输入密码解密实例:     openssl enc -des3 -d -salt -a -in  inittab.des3 -out inittab

密钥交换

    公钥加密:公钥传送给对方,密码在网上传输,通过暴力方式可以破解出来,但是用DH不会

    DH :Diffie-Hellman算法 原理看IKE

IKE:密钥交换简写    离散对数原理剖析:  (单向加密)        A:生成 x     B:生成 y        A:g^x%p --> B    A把g的x次方对p取模 传给B        B: g^y%p --> A    B把g的y次方对p取模 传给A    我们在互联网上传递了4个数字:     四个数字分别是   g 、p、 g^x%p、g^y%p    拿到数字后         A:(g^y%p)^x=g^yx%p       B:(g^x%p)^y=g^xy%p 分别取自己手中数字的平方,结果相同 这就是著名的Diffie-Hellman算法

生成用户密码:

openssl passwd -1 -salt SALT  (-1 是md5加密格式)


/]# openssl passwd -1 -salt 123   Password:   $1$123$7mft0jKnzzvAdU4t0unTG1 /]# openssl passwd -1 -salt 123   Password:   $1$123$7mft0jKnzzvAdU4t0unTG1 由此可见sort一样密码一样,生成的密码串一定一样
生成随机数:      

~]#openssl rand -base64 10~]#openssl rand -hex 10   相当于sort可以命令调用

随机数生成器:

        /dev/random:仅从熵池中返回随机数;随机数用尽,阻塞

        /dev/urandom:从熵池返回随机数,随机数用尽,会利用软件生成伪随机数,非阻塞;伪随机数不安全

       熵池中随机数的来源;

            硬盘IO中断时间间隔;

            键盘IO中断时间间隔;  如果随机数用尽可以通过复制大文件来生成随机数
创建私有CA:

openssl命令:

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

       构建私有CA:

       在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;

   步骤:

     (1) 生成私钥;

~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)注释:使用rsa算法生成密钥并保存至/etc/pki/CA/private/叫做cakey.pem 密码长度为4096

使用rsa算法生成私钥保存为cakey.pem这个名

       (2) 生成自签证书;   

~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655         -new:生成新证书签署请求;         -x509:生成自签格式证书,专用于创建私有CA时;         -key:生成请求时用到的私有文件路径;         -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;         -days:证书的有效时长,单位是day;注释:req生成自签署证书,指明密钥文件是cakey.pem并将证书保存为cacert.pem,指定有效期为一年 CN;Hebei;Zhengzhou;Renfang;Yunwei;ca.iyunv.com;caadmin@iyunv.com

     (3) 为CA提供所需的目录及文件;     

         ~]# mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts}         ~]# touch  /etc/pki/CA/{serial,index.txt}         ~]# echo  01 > /etc/pki/CA/serial                    

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

客户机请求CA授权:               

     步骤:(以httpd为例)

      (1) 用到证书的主机生成私钥;

          ~]# mkdir  /etc/httpd/ssl           ~]# cd  /etc/httpd/ssl          ~]# (umask  077; openssl  genrsa -out  /etc/httpd/ssl/httpd.key  2048)

      (2) 生成证书签署请求

          ~]# openssl  req  -new  -key  /etc/httpd/ssl/httpd.key  -out /etc/httpd/ssl/httpd.csr  -days  365

      (3) 将请求通过可靠方式发送给CA主机;即将httpd.csr文件发送到CA服务器上                    

      (4) 在CA主机上签署证书;

   

吊销证书:     步骤:       (1) 客户端获取要吊销的证书的serial(在使用证书的主机执行):         ~]# openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject       (2) CA主机吊销证书         先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;                                  吊销:         # openssl  ca  -revoke  /etc/pki/CA/newcerts/SERIAL.pem                                     其中的SERIAL要换成证书真正的序列号;                                        (3) 生成吊销证书的吊销编号(第一次吊销证书时执行)         # echo  01  > /etc/pki/CA/crlnumber                            (4) 更新证书吊销列表         # openssl  ca  -gencrl  -out  thisca.crl                                   查看crl文件:         # openssl  crl  -in  /PATH/FROM/CRL_FILE.crl  -noout  -text

      
openssl 配置文件:

           /etc/pki/tls/openssl.cnf

     [iyunv@localhost tmp]# cat  /etc/pki/tls/openssl.cnf

该配置文件中以 "[配置段]",的形式配置相关信息

===============================================================================================

==================================== openssl.cnf部分内容摘要=====================================

# OpenSSL example configuration file.

# This is mostly being used for generation of certificate requests.

######################################################################################

[ ca ]         #CA相关配置段

default_ca        = CA_default                # The default ca section                 # 默认CA在[ CA_default ]配置

######################################################################################

[ CA_default ]        #  默认当做CA的工作环境

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.颁发过的证书索引文件

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



# Comment out the following two lines for the "traditional"

# (and highly broken) format.

name_opt         = ca_default                # Subject Name options

cert_opt         = ca_default                # Certificate field options



default_days        = 365                        # how long to certify for证书的默认有效期

default_crl_days= 30                        # how long before next CRL默认声明有效期

default_md        = sha256                # use SHA-256 by default默认的生成算法

preserve        = no                        # keep passed DN ordering

####################################################################

[ req ]        # 向CA证书签署发起注册请求相关属性

default_bits                = 2048

default_md                = sha256

default_keyfile         = privkey.pem

distinguished_name        = req_distinguished_name

attributes                = req_attributes

x509_extensions        = v3_ca        # The extentions to add to the self signed cert

===============================================================================================




     

      

在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可


   提取公钥

   openssl rsa -in server.key -putout  将server.key里的公钥提取出来,一般不需要手动


步骤二、

    req生成自签署证书( 指定密钥文件是cakey.pem 保存在cacert.pem 指定有效期限为一年)

站在CA目录上执行

    openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem -days 365

     CN;Hebei;Zhengzhou;Renfang;Yunwei;ca.iyunv.com;caadmin@iyunv.com

     自签署证书做好了  可以用这句话查看openssl x509 -text -in server.crt

   现在CA准备好了

四:vim /etc/pki/tls/openssl.cnf  编辑CA的配置文件

    修改:dir    =/etc/pki/CA

           CA中还必须包含下面的几行命名的目录

           在下面 还可以设置默认的个人信息,以后就不用重复填写了   

五:私钥应该保存在/etc/pki/CA/private目录下叫做cakey.pem

六:在CA下创建 mkdir certs newcerts crl

七、还要准备两个文件:touch index.txt  touch serial ;echo 01 > serial

八、在另外一台服务器上mkdir /etc/httpd

                      cd /etc/httpd;  mkdir ssl/  ;  cd ssl/

九、这台服务器需要申请生成私钥 (umask 077; openssl genrsa -out httpd.key 1024 )

十、还在ssl目录下 进行证书签署请求

        openssl req -new -key httpd.key -out httpd.csr

        下面填写的城市  公司 部门  一定要和CA一致

十一、因为在一台服务器,签署证书就不用远程发送;下面是ca签发的过程

    openssl ca -in httpd.csr -out httpd.crt -days 365     

十二:当前目录下就会有一个httpd.crt的证书

十三:回到CA  cd /etc/pki/CA;   cat index.txt 会有一个01号 因为前面咱们echo进去了一个01


.crt是证书 .csr是请求 .key是生成密钥


这个过程需要背过;而且要能把当前主机做成CA的过程用脚本实现,包括修改配置文件


附加知识点 生成测试用户:cd /etc/pki/tls/certs/

           make httpd.pem 他会自动帮你生成私钥 让你填写各种信息

          在certs目录下就会生成一个httpd.pem (私钥也在里面,但是正式环境不能这么玩)  根据后缀的不同自动确定是什么文件 Makefile文件中有定义   

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-221933-1-1.html 上篇帖子: TCP协议三次握手、四次挥手 下篇帖子: RStudio安装caret报错修复过程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表