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

[经验分享] OpenSSL以及私有CA的搭建

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-30 08:33:01 | 显示全部楼层 |阅读模式
首先我们肯定会问什么是OpneSSL,以及OpenSSL有什么用?当让这不仅是刚接触Linux的我想知道,相信大多数人和我一样也非常想知道,因为OpenSSL是linux上基础的服务之一,了解它的应用可以帮助我们更好的了解linux。那么我们先了解下什么是OpenSSL已经它有什么用。

一、OpenSSL及其应用

        首先我们要了解SSL是什么?SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的秘钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。OpenSSL还可在局域网内构建私有CA,实现局域网内的 证书认证和授权,保证数据传输的安全性。如何构建私有CA呢?后面将详细讲述基于OpenSSL实现私有CA构建。

二、了解常用的加密方式

加密方式有对称加密 非对称加密 单向加密

     1、 对称加密:

加密和加密都用同一个对称密钥,但是,这种加密方法存在一定问题,就是密钥传输时,容易被盗窃。还有密钥管理困难,对称加密的方法:DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5。

    2、  非对称加密:
公钥和私钥都可以进行加密,解密是公钥和私钥对应解密的,就好像一把锁对应多把相同的钥匙一样,公钥可以公开的,非对称加密解决了密钥传输时带来的问题,同时还解决了密钥管理的繁杂的问题。但是如果你用非对称加密的方式来加密一段数据,速度会非常慢,比对称加密的速度慢几个数量级。非对称加密的方法:RSA DSA

     3、单向加密:

单向加密是用来提取数据的特征码,为了保证数据传输时的完整性,哪怕数据发生一点的变化,特征码都会引起巨大的改变,单向加密的方法:MD5 SHA


三、数据的安全传输方式

        如上面已经提到了三种加密方式,和一些加密算法。那么在数据的传输过程中如何才能保证数据传输的安全性呢?
对于发送段和接收端,如下阐述

        1、发送端:

(1)、使用单向加密算法提取生成数据的特征码

(2)、使用自己的私钥加密特征码附加在数据后面

(3)、生成用于对称加密的临时密钥

(4)、用此临时密钥加密数据和已经使用私钥加密后的特征码

(5)、使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后方

2、接收端:

(1)、使用自己的私钥解密加密的临时密钥;从而获得对称密钥

(2)、使用对称密钥解密对称加密的数据和私钥加密的特征码密文;从而获得数据和特征码密文

(3)、使用发送方的公钥解密特征码密文,从而获得从计算生成的特征码

(4)、使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较

wKioL1YKiWDi6gAvAAGIBrVJiE4603.jpg

阐述中提到的公钥,用来加密;私钥用来解密。公钥与私钥的作用的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密

四、与CA证书创建的一些内容


  如上所述,在数据的传输过程中存在很多不安全因素,因此对数据加密传输成了现在互联网上一个常用手段,那么如何多数据进行加密传输呢,我们这边就来介绍一种关于数据加密的协议,即CA证书。也许我们这边说的不是太准确,我个人的理解CA就是用于加密通信的一种实现方式。那么我们如何去创建一个CA呢,当然我这里所的创建是针对本机来说的,而对于互联网上的CA证书都是有权威机构颁发的。私人是没有权限颁发CA证书的。如果我们要创建私有CA的话,需要了解以下几个内容:

1、PKI:公钥基础设施(Public Key Infrastructure)

        包含以下组成部分:

签证机构:CA

        注册机构:RA

证书吊销列表:CRL

       证书存取库

2、X.509证书的格式:定义了证书的结构以及认证协议标准

版本号

序列号

签名算法ID

发行者名称

有效期限

主体名称

主体公钥

发行者惟一标识

主体的惟一标识

扩展

发行者签名

3、SSL:安全的套接字层(Secure Socket Layer)

        SSL的版本:

1995:SSL 2.0, Netscape

1996: SSL 3.0

1999: TLS 1.0 :改名为TLS

2006: TLS 1.1 RFC 4346

2008:TLS 1.2 :现在常用的是这个版本

2015: TLS 1.3 :这个是现在比较新的版本,还没有普及

    SSL和TCP/IP协议一样也使用了分层设计的结构,下面介绍下它的分层结构

        (1)、最低层:基础算法原语的实现,aes, rsa, md5

        (2)、向上一层:各种算法的实现

        (3)、再向上一层:组合算法实现的半成品

        (4)、用各种组件拼装而成的种种成品密码学协议/软件,如:tls, ssh,

  4、OpenSSL:程序包是开源项目

        有三个组件组成:

openssl: 多用途的命令行工具;

libcrypto: 公共加密库;

libssl: 库,实现了ssl及tls;

        (1)openssl命令详解

        查看当前openssl的版本

[iyunv@localhost ~]# openssl version

OpenSSL 1.0.1e-fips 11 Feb 2013

        (2)对称加密实现:加密和解密使用同一个秘钥,如:

[iyunv@localhost tmp]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext

    #对tmp下fstab这个文件进行des3加密方式加密输出为fstab.ciphertext

enter des-ede3-cbc encryption password:        #输入密码

Verifying - enter des-ede3-cbc encryption password:        #再次输入密码

[iyunv@localhost tmp]# tail -3 fstab.ciphertext         #查看fstab.ciphertext文件,这里就会显示编码的形式

YudNqbvUskrHCcXg6BJqUOQXG0cfxUpz77jQpwKD5F/ASUtOs+zBkKvctWe+bOTs

Az1oGEeUn5gwHp4PBvSQbZJpY+BurIr+pcwXO1lt4M2odWmV7wG1RQDHanukOUAj

EJ2S4jyoOhHO1yzlpqKjypTsGQB3IMs+969n6w4iAio=

[iyunv@localhost tmp]# rm -rf fstab        #删除原文件

[iyunv@localhost tmp]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab  

    #把fstab.ciphertext解密输出为fstab文件

enter des-ede3-cbc decryption password:        #输入密码

[iyunv@localhost tmp]# tail -3 fstab        #查看解密后的文件

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

[iyunv@localhost tmp]#

注:其中的加密算法可以根据自己的需要更改   

    (3)单项加密

dgst命令:

用法:openssl dgst -md5 /PATH/TO/SOMEFILE ,如

[iyunv@localhost tmp]# openssl dgst -md5 fstab

MD5(fstab)= e83bea7d589639c435390c19b372e89e

      (4) 生成用户密码,passwd命令,如

[iyunv@localhost tmp]# openssl passwd -1 -salt 12345 deanzhu

$1$12345$I3fdyYvZmTklIOQyuo5HG1

      (5)生成随机数,

openssl rand -base64|-hex NUM

NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2; 如

[iyunv@localhost tmp]# openssl rand -base64 16

ZHTO2YRBGxfKnXqeAcpVtg==

[iyunv@localhost tmp]# openssl rand -base64 24

tZGXdlyo9zRCiLhnPv9YDdrFnd01SYX4

        (6)生成秘钥对

       用法:openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS

提取出公钥:

用法:openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout

[iyunv@localhost tmp]# openssl genrsa -out rsakey.privte 2048 #生成2048位的私钥

Generating RSA private key, 2048 bit long modulus

............+++

.......+++

e is 65537 (0x10001)

[iyunv@localhost tmp]# cat rsakey.privte #查看私钥

-----BEGIN RSA PRIVATE KEY-----

MIIEpQIBAAKCAQEAzOE5ObkTYyZeYBJHbNm6qFADp+96Vg2VGHZTWtUO609j+36f

dTBHtIxG9HlRnADVJhDCgGKmBMta3zuHVe4gsVTuCHSFuNETxrV/Z1bZg9EH/vB8

bJ7ML9Jpw+8og0hzix8Vxgd52Bp2KXq02qq2TkJzHeJMoxQF6EAJPrtCsi6fJ6JN

9kDFnu8OKJHj9yBZgLt7lKe+zwcA+hV5Dt6Ca4z1h9ckrBdI4pF6gv6Jk2Yu3Y2W

JZRhXzmRPWIofO3CghDYVLrmqraWvsQb3SYm13IWnfYGAr14eV8W/ONS5BxuNoHA

ZdM+i0fAvf55loKvMPkjD2gkLTy3UY79BIh5BwIDAQABAoIBAAH8/Y0t2p5PtQLB

qqfHxSP1AtQSYuGK6DOAknaDMs3dy16Zb/q3KTr7UYT12HDnISppZznPu0S4pH0e

GsYetXqDFHxIhTOx87st77qVAS9iS+2Rb+Ot9tVP+W7JV19OyLBE8PUnBWuvdg4Y

/sBQf8xqoKtdktjSTOxgErblIlSQUs1nBWfnRf5rXEEvd97/30EUUhFMVF23HEA5

xjgdXnCQdGZjpVxN57OTMKQ/Rj+8StXJYsvunGfYMIoR99ziHyrJF8hgX/mwiHEw

XeUYXxLPUFWcSKDUwO1hYlTap5NB0DNW/zDtj6VF5MtHYUI0fIDuZNgA7/BKirrb

ydnbCIECgYEA+FuLnkxR0deT3w7t1e7ATflJREmTdhcOM0BeBMFi5aoVvjDqOqbD

91kWqy34jina+44weg2N4youXsCQtjxc3bTmVXg1lsUIWsSTU8XMhhAvRkit1Hr8

HPuEB6QTiuu4ZSNydAUyKaaOZp8OvOTB/cjArYJZHm1nXWcZ+6LNFtECgYEA0y8t

tO1IWiQx2yg+MhIjkMgFEzhnVmLZa8dkW2QwhW/MKVB3evJM4DyklZiuCLD5QpLl

uvWlwNdrpYCjliLJOcUC1f5ExJnNk9ZxjYpcx7/cHT5+CNR7aru3wSm5EUOBPCHf

lnh6NZBhk5xzi8EmpZDqdjItowqCBaD9kzxYOFcCgYEAoteLjSingTqjp17njR01

lCq+4nqHqKdnVS2AOAgA62uBRCpYekp8NYOBfI3w6m4BOm251V1ryiYPL2t9ty+P

CIOjfykJoijg2HsJyqTn/INCLAhdifN1uR8lK8lmUvFJ/26ljfMWN/8QYbMq+6nW

lKt7woi0HGJJoxGGFNtjM/ECgYEAzA2eAF/1tQOcGMJ9tivIqbBbFwM89j91DasP

0S6xo30urAzQJb/RgCmYbeOk5Uj6z9TYnRmWGwsLPFNbvUnHXUZ7QwH4uG5UMTDX

b4fttiQwLyGe7jFBPxQ6rS3/YCr1yICCZgXrL65eWh6llrf++6NWqPY7Gnqgv4ea

/JUmOOkCgYEAngIzNp8EBLdNFvnca59GMT4CmVF8Wk/hZGAPBCEeGHnpqBiSfytg

aTwdkwRy1FfCSbqju3tzMkdB57nwKaT0er8uHN9L/5hIgjcaQyHtNlYYKxqsh9gH

Nf1IKJLUIX4JtnDBfWQay4WJO0l9U+WLGlX3WFoZebnhAgJO3LBchfo=

-----END RSA PRIVATE KEY-----

[iyunv@localhost tmp]# openssl rsa -in rsakey.privte -pubout #从私钥中提取公钥

writing RSA key

-----BEGIN PUBLIC KEY-----

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzOE5ObkTYyZeYBJHbNm6

qFADp+96Vg2VGHZTWtUO609j+36fdTBHtIxG9HlRnADVJhDCgGKmBMta3zuHVe4g

sVTuCHSFuNETxrV/Z1bZg9EH/vB8bJ7ML9Jpw+8og0hzix8Vxgd52Bp2KXq02qq2

TkJzHeJMoxQF6EAJPrtCsi6fJ6JN9kDFnu8OKJHj9yBZgLt7lKe+zwcA+hV5Dt6C

a4z1h9ckrBdI4pF6gv6Jk2Yu3Y2WJZRhXzmRPWIofO3CghDYVLrmqraWvsQb3SYm

13IWnfYGAr14eV8W/ONS5BxuNoHAZdM+i0fAvf55loKvMPkjD2gkLTy3UY79BIh5

BwIDAQAB

-----END PUBLIC KEY-----

五、私有CA的搭建

如果要创建CA我们就必须先了解下和CA相关的工作流程,如下图

wKioL1YKiX3BHfFOAAE0O8N4X2E608.jpg

        1、服务器端建立CA

[iyunv@localhost CA]# (umask 077;openssl genrsa -out /etc/pki/CA/private/ca 2048 -des3) #生成秘钥

Generating RSA private key, 2048 bit long modulus

....................................+++

...............................................+++

e is 65537 (0x10001)

[iyunv@localhost CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365

    #自签证书

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]:beijing

string is too long, it needs to be less than  2 bytes long

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]:iyunv

Organizational Unit Name (eg, section) []:www.iyunv

Common Name (eg, your name or your server's hostname) []:www.iyunv.com

Email Address []:admin@iyunv.com

[iyunv@localhost CA]# ls

cacert.pem  certs  crl  newcerts  private

[iyunv@localhost CA]# touch index.txt      #初始化工作环境

[iyunv@localhost CA]# echo 01 > serial

        2、客户端申请证书

[iyunv@localhost CA]# (umask 077; openssl genrsa -out /etc/rsa/my.key 2048 -des3)

#客户端生成秘钥对

Generating RSA private key, 2048 bit long modulus

.......................+++

......................................+++

e is 65537 (0x10001)  

[iyunv@localhost CA]# openssl req -new -key /etc/rsa/my.key -out /etc/rsa/my.csr

#生成证书请求

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) []:beijing

Locality Name (eg, city) [Default City]:beijing

Organization Name (eg, company) [Default Company Ltd]:iyunv

Organizational Unit Name (eg, section) []:www.iyunv

Common Name (eg, your name or your server's hostname) []:www.iyunv.com

Email Address []:admin@iyunv.com



Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

        3、把签署请求文件发送给CA服务器

        可以使用命令 scp

        用法:PULL:scp [options] [user@]host:/PATH/FROM/SOMEFILE /PATH/TO/SOMEWHERE

  PUSH: scp [options] /PATH/FROM/SOMEFILE [user@]host:/PATH/TO/SOMEWHERE

        4、服务器签署证书

[iyunv@localhost CA]# openssl ca -in /etc/pki/CA/my.csr -out /etc/pki/CA/my.crt -days 365

    #签署证书,有效期为365天

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

        Serial Number: 1 (0x1)

        Validity

            Not Before: Sep  6 10:57:27 2015 GMT

            Not After : Sep  5 10:57:27 2016 GMT

        Subject:

            countryName               = CN

            stateOrProvinceName       = beijing

            organizationName          = iyunv

            organizationalUnitName    = www.iyunv

            commonName                = www.iyunv.com

            emailAddress              = admin@iyunv.com

        X509v3 extensions:

            X509v3 Basic Constraints:

                CA:FALSE

            Netscape Comment:

                OpenSSL Generated Certificate

            X509v3 Subject Key Identifier:

                1F:60:5C:7F:76:1E:DC:0D:78:C6:EA:FC:DE:2D:A5:DC:74:69:2E:4B

            X509v3 Authority Key Identifier:

                keyid:B3:61:4C:47:88:80:44:F2:C7:4C:D6:F2:9D:33:E2:3C:FC:4D:28:1E



Certificate is to be certified until Sep  5 10:57:27 2016 GMT (365 days)

Sign the certificate? [y/n]:y





1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

[iyunv@localhost CA]# cat index.txt

#查看index文件,存放证书subject信息,其中V表示可用证书

V    160905105727Z        01    unknown    /C=CN/ST=beijing/O=iyunv/OU=www.iyunv/CN=www.iyunv.com/emailAddress=admin@iyunv.com

        5、发送给请求者

[iyunv@localhost mysql]# scp /etc/pki/CA/my.crt 192.168.0.13:/tmp

#将证书发送的客户端机器的tmp目录下

The authenticity of host '192.168.0.13 (192.168.0.13)' can't be established.

RSA key fingerprint is ef:3d:22:74:19:4f:5f:70:29:b9:a0:de:0b:db:41:ba.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.0.13' (RSA) to the list of known hosts.

Address 192.168.0.13 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

root@192.168.0.13's password:

my.crt                                          100% 4659     4.6KB/s   00:00   



6、吊销证书

[iyunv@localhost CA]# openssl x509 -in my.crt -noout -serial -subject

#获取证书节点

serial=01

subject= /C=CN/ST=beijing/O=iyunv/OU=www.iyunv/CN=www.iyunv.com/emailAddress=admin@iyunv.com

[iyunv@localhost CA]# cat index.txt

#CA根据节点提交的serial和subject来验证index.txt文件中信息是否一致

V    160905105727Z        01    unknown    /C=CN/ST=beijing/O=iyunv/OU=www.iyunv/CN=www.iyunv.com/emailAddress=admin@iyunv.com

[iyunv@localhost CA]# openssl ca -revoke newcerts/01.pem #吊销证书

Using configuration from /etc/pki/tls/openssl.cnf

Revoking Certificate 01.

Data Base Updated

[iyunv@localhost CA]# echo 00 > crlnumber #生成吊销证书的编号

[iyunv@localhost CA]# openssl ca -gencrl -out thisca.crl #更新证书吊销列表

Using configuration from /etc/pki/tls/openssl.cnf

六、总结

关于openssl其中有很多内容还没有讲到,以上的内容只是个人学习的总结,可能有些部分说的不正确,还请指出。谢谢!

运维网声明 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-120662-1-1.html 上篇帖子: 网络配置管理之ifconfig、route、netstat 下篇帖子: 基于openssl 的https服务配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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