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

[经验分享] 基于ssl协议和openssl工具建立私有CA

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-6 08:35:03 | 显示全部楼层 |阅读模式
前言

    要自建CA需先了解openssl工具和ssl协议还有各加密类型
    ssl(Secure Socket Layer)安全套接字层当前版本为3.0,浏览器与Web服务器之间的身份认证和加密数据传输,它工作在传输层和各应用层之间,用户可以选择是否使用ssl进行传输,选择ssl协议将调用ssl函数库,端口也会发生变化。


加密类型
          对称加密:任意加密数据块和流的内容,加密和解密用同一个密码, 通常明文通过算法和密钥生成密文,再由接受者用相同的密钥和算法解密获取明文。
              算法:(DES、3DES、AES现在使用比较广、Blowfish、Twofish、IDEA、RC6、CAST5)
              特性:加密、解密使用同一口令。将明文分割成固定大小块,逐个进行加密
              缺陷:密钥过多、密钥传输不安全、密钥交换、身份验证。

               
          公钥加密:公钥和私钥是成对出现的,公钥包含在私钥中,公钥称为public key、私钥为secret key,由发起者对接受者索要公钥,用公钥加密数据后发送给接受者,接受者用算法和私钥解密
              缺陷:加密、解密时间过长一般不用于简单通信

          单项加密:单项机密也叫数据完整性校验,抽取数据特征码和之前特征码作比较以确保数据没有被窜改

          认证协议:用来确定通信方的真实性。



ssl会话模型
       发起者用单项加密获取数据特征码,用自己的私钥计算特征码附加在数据后面,在用对称加密对整个包(数据和特征码)进行加密,并用对方公钥加密对称加密密码,附加在整个包中一并发给对方。接受者用自己的私钥解密获取对称加密密码,得到密码后解密整个包获得数据和特征码,在用相同的算法计算特征码,用对方的公钥解密数据验证对方身份,用对方计算结果(特征码)和解析结果(特征码)进行对比,来验证数据的完整性。

openssl工具
  对称加密工具openssl enc
               openssl命令选项:
                   -e:指定为加密,可以不写默认为加密。
                   -des3:指定算法算法
                   -salt:默认设置,生成一段字符串放在密码最前面进行加密,提高解密难度。
                   -a:基于base64处理数据。加密结果进行base64编码处理
                   -in:读取那个文件进行加密
                   -out:输出到那里
                   -d:指定为解密

               案例如下:
                   加密文件:openssl enc -e -des3 -a -salt -in test.sh -out ./test.txt
                   解密文件:openssl enc -d -des3 -a -salt -in test.txt -out ./test.sh



       单项加密:openssl dgst
                  -md5:用md5方式加密
                  -sha1:sha1方式加密
                  -out:加密后密码保存到那里

               案例如下:
                  openssl dgst -md5 test.sh 或openssl dgst -md5 -out ./123a test.sh
                  openssl dgst -sha1 test.sh


       用户密码:openssl passwd
                  -1:md5加密、
                  -salt:自己指定附加信息。

                  生成随机数:openssl rand -base64 4或openssl rand -hex 4,生成8位随机数
               案例如下:
                  openssl passwd -1 -salt `openssl rand -base64 4` 123456  
   
       生成私钥和公钥:openssl genrsa
               案例如下:
                 (umask 077;openssl genrsa -out ./mykey 2048)生成只有当前用户可读的2048字节mkkey私钥文件
                  openssl rsa -in ./mykey -pubout,-pubout根据私钥文件提取公钥


建立私有CA:
          服务器端:
             生成密钥
             自签证书
             初始化工作环境
       节点:
             生成密钥对儿
             生成证书签署请求
             把请求发送给CA
       CA服务器:
             验正请求者信息:自建CA无需该步骤
             签署证书
             把签好的证书发送给请求者   

服务器端自建CA
       生成密钥:
             (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
       自签证书:
             req: 生成证书签署请求
             -news: 新请求
             -key /path/to/keyfile: 指定私钥文件
             -out /path/to/somefile:输出文件到那里
             -x509: 生成自签署证书
             -days n: 有效天数
             openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
             详细记录证书创建时所填信息如不一致签署将失败。建议修改openssl.conf文件发给每个申请节点
       初始化工作环境:
             touch /etc/pki/CA/{index.txt,serial}:创建相关文件
             echo 01 > /etc/pki/CA/serial。只需第一次创建序列号

节点申请证书:
       生成密钥:
             (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
         生成证书签署请求:
             openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr
         把签署请求文件发送给CA服务


CA服务器签署证书:
                  签署证书:
             openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N
         发送给请求者:

CA证书验证会话模型
       在基于tcp/ip协议建立后,服务端会把ca证书发送给客户端,客户端得到证书后通过ca公钥进行解密ca签名,能解密证明该证书是可信任的、把解密出来的数据和重新计算出来的特征码对比对确保完整性、之后验证主机的名称和申请者名称是否相同,验证通过后客户端会取得服务器端公钥信息,客户端用公钥生成个一次性的对称加密密码发给服务器端。服务器端获取密码后加密网页数据发给客户端。

以上为建立CA大致流程,如有遗漏请告知。



运维网声明 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.iyunv.com/thread-63994-1-1.html 上篇帖子: Linux下的mysql数据库主从 下篇帖子: CentOS安装jdk的三种方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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