openssl玩法及搭建私有CA

上一期我最后介绍了关于搭建https站点的过程,但是并未介绍了关于搭建私有CA证书的过程,不过在这一期我会详细介绍搭建私有CA!

首先在说openssl之前我还是先说说关于SSL和TLS协议吧!

  • SSL:secure socket layer 是安全套接字协议
  • TLS:transport layer secunty 传输层安全协议

这两个协议都定义在应用层与传输层中间的“半层”,大家可以回顾一下OSI参考模型在会话层封装好报文然后选择好端口以后再加上半层帮助进行加密封装。因为在传输层一下就无法加密,而应用层无法管理此事,所以在中间加半层来进行加密与解密。而在这个“半层”中内部分为了四层:

  • 最底层:基础算法的实现:比如AES、RSA、MD5等
  • 向上一层:各种算法的实现
  • 再向上一层:子和算法实现的半成品
  • 最上层:用各种组建拼装而成的种种成品密码字协议/软件:tls,ssh

说完了关于ssl与tls的协议,接下来看看关于实现通过这些可以加密的协议来实现传输的工具(应用程序)!对于应用程序当然最经典最常用的就是openssl!

安装openssl其实很简单,在centos中只需yum install -y openssl-devel 即可这样关于openssl所有的包和依赖包都会安装完毕!或者你也可以在www.openssl.org官网上面下载源代码包进行编译安装!

安装其实还是比较简单的,接下来扒一扒关于openssl的开源项目三个组件:

  1. openssl本体:多用途的命令工具
  2. libcrypto 公共加密库
  3. libssl库,实现了ssl及tls协议

现在开始说大家关心的“重点”部位关于命令的使用:

首先大体的语法格式其实就是openssl COMMAND [OPTIONS] 这种结构,openssl是必须现在前面的但是command属于子命令,可以通过openssl -h来获取帮助(PS其实输错命令也会有帮助的):

openssl01

这个是帮助提供的可以使用的命令,第一行的”Standard commands”是可以使用的子命令,其中version是查看版本号,这个可以首先用起来:openssl version这样就能看到当前Openssl程序是啥版本。第二段的“Message Digest commands”看到我画的红线部分没有这个是关于使用dgst这个自命令使用的算法。那么以此类推第三段的“Cipher commands”就是关于enc自命令使用算法了。

接下来看看常用的子命令玩法:

openssl enc  加密或者解密文件(对称加密)

语法: openssl enc [-e|-d] [加密命令] [-a] [-salt] [-in] /GET/TO/SOMEWHRER [-out] /PUT/TO/SOMEWHERE

  • -e 加密
  •  -d 解密
  • -a 基于文本进行编码
  • -salt 加入杂质
  • -in 从哪边读取文件
  • -out 输出文件至目的地

这个enc的子命令可以用在比如加密的你密码的文本文件,或者其他机密型的秘密文件!或者其他令人想象不到的玩法(自己想象哦其实这个命令非常常用!)

openssl dgst 单向加密;计算文件特征码(就是你网上下载开源程序的MD5或者sha1的文件编码)

语法:openssl dgst [-消息摘要算法] /PATH/TO/SOMEFILE

随后你就会获得关于这个消息摘要算法的特征码,关于dgst算法我是不是在help帮助文档中说过了呢?

openssl passwd 加密输入的字符

语法:openssl passwd -1 -salt SALT

  • -1 使用MD5加密字符
  • -salt SALT 指明加入的杂质字符

使用这个命令可以加密你的密码,不过常用度来说没有上面两个多!

openssl rand 可以生成随机数(挺不错的可以看看用法)

语法:openssl rand [-OPTIONS] NUM

  • -base64 通过base64输出(OPTIONS)
  • -hex 通过hex输出 (OPTIONS)
  • NUM 表示字节数;如:-hex时,每个字符4位,出现的字符数为NUM*2

这个可以用来生成密码字符来使用,不过现在都是使用取/dev/random等这种办法了,不过这个命令生成的密码还是OK的!

下面来说说重头戏!!!生成密钥对:

首先生成一个私钥:

语法:openssl genrsa -out /PATH/TO/SOMEWHERE -NUM_BITS

  • -out 输出位置
  • -NUM_BITS 使用多少位密钥?

注意:如果这样生成的私钥任何人都可以读取观看,请及时修改权限;或者也可以这样写:

(umask 077;openssl genrsa -out /PATH/TO/SOMEFILE -NUM_BITS) 别忘了把“()”加上

从私钥中提取公钥:

openssl rsa -in /PATH/FROM/SOMEFILE -pubout -out /PATH/TO/SOMEFILE

  • -in 从哪里来读取私钥
  • -pubout 输出公钥

后面的-out也可以写成“ > 输出的文件名”这样就算从私钥中提取了公钥

现在开说说童鞋们最关心的:关于搭建私有CA

建立私有CA的Linux程序有两个:openCA、openSSL(搭建CA还是以这个为例)

证书申请及签署步骤:(客户端)

1、生成申请请求  2、RA检验  3、CA签署  4、获取证书

关于CA的配置文件在:/etc/pki/tls/openssl.cnf

首先我们先创建一个CA颁发机构才能给客户端颁发证书:

一、创建办法机构需要的两个文件:

openssl02

首先我们要进入CA这个文件夹里面才能创建两个文件,其中serial需要写入01这个值

二、创建CA颁发机构

openssl03

第一条命令是创建CA机构的私钥,关于生成私钥我在前面提到过啦!!第二条命令就是CA自己给自己签证书形成CA机构,其中这些选项可以了解一下:

  • -new 生成新的证书签署请求
  • -x509 专用于CA生成自签名证书
  • -key 生成请求时用到的私钥文件
  • -days 证书的有效期限
  • -out /PATH/TO/SOMECERTFILE 证书的保存路径

在执行第二条命令之后分别填写:国家、省名、城市名、公司名、部门名、主机名(和DNS服务器解析名保持一致或者写IP地址不能随意填写)邮箱

三、在服务器端创建证书然后给CA机构进行签发

openssl04

第一步还是首先生成服务器端的私钥文件,第二步服务器端通过私钥文件生成服务器端证书(请别添加-x509这个选项哦!)。

注:信息要与CA服务器端的内容保持一致(国家、地区、公司要一致)除此之外还会让你可以选择填写加密证书请求!

第三步请将生成的证书传给CA服务器,我的CA服务器和httpd服务器都是在一个机器上所以不用传了(记得传文件的时候使用sftp或者加密后传送)

第四步让CA服务器签署证书:

openssl05

别忘了使用-in -out进行输入输出,还有-days签署的天数。最后生成的服务器端证书文件是httpd.crt。

如果windows客户端想要使用https的话别忘了把一开始的cacert.pem加密送到windows客户端即可,也可以把httpd.crt传送到windows客户端让客户端信任证书即可!关于在httpd配置https我好像上一期说过!

Comments

Leave a Reply

Your email address will not be published. Name and email are required