基于ssl协议和openssl工具建立私有CA

前言

    要自建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大致流程,如有遗漏请告知。

原创文章,作者:xiangjin1,如若转载,请注明出处:http://www.178linux.com/3991

(0)
上一篇 2015-05-05 18:17
下一篇 2015-05-07 09:30

相关推荐

  • N22第六周作业

    VIM编辑器介绍 什么是VIM? Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是纯粹的自由软件。 Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。 VIM的使用 &nbsp…

    Linux干货 2016-10-24
  • bash通配符和正则表达式元字符部分归纳

    Linux中有各种各样的字符,而且在不同环境和不同命令之下含义也不同 作为新手,决定先归纳学到的符号,方便后面学习厘清它们之间的关系。 glob 简化了的正则表达式 bash默认通配符: ? :只匹配一个任意字符; * :匹配零个或多个任意字符;   [^] :方括号及其中^中的取反 [abc]:匹配任何一个列在方括号中的字符(这个例子要么匹配一个…

    Linux干货 2016-04-11
  • ​源码编译安装LNMP

    源码编译安装LNMP 环境:CentOS6.6 IP: 172.16.10.10/16 GW:172.16.0.2 主机名称: lnmp.test.net 一、常规设置: 网卡: 临时 ifconfig eth0 172.16.10.10/16 up 永久 [root@www ~]# vim /etc/sysconfig/network-scripts/if…

    Linux干货 2016-11-14
  • 推倒一个二十来岁青壮年第一步

    首先:找到他家在哪里,了解他的生长环境 然后:调查他的信息,慢慢了解他,学会和他交流,学会控制他

    Linux干货 2016-09-21
  • Linux 压缩、解压缩和打包工具

        前言:你是否曾经因为某个文件占用空间较大,而空间紧缺的U盘无法存放此文件。你是否曾经因为软件里有太多文件而不方便复制和携带。你是否曾因需要备份太过零散而头疼。那么基于“文件压缩和打包”的技术因此出现。下面介绍下Linux下关于压缩、解压缩和打包的工具及使用。 一、相关术语的原理和意义   &…

    Linux干货 2015-07-15
  • Linux中的软链接/硬链接

    Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。 【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指…

    Linux干货 2016-10-20