openssl 实战

一、前言

因工作需要,须在某协议栈中支持TLS 1.0,以提升协议的安全性。

为此,对著名开源库 openSSL 做一番了解并打算基于其上进行开发。

因实际操练过程中,发现网上的资源有许多坑,特记录以备忘,一来自用,二来可能可造福同好。


二、相关文档和资源

首先找到 openssl 官网的推荐文档:https://www.feistyduck.com/library/openssl-cookbook/online/

本来打算按部就班地学习和进阶,但是不幸的是,或许因为openssl 版本更迭步子太快,扯到蛋了,因此我按照步骤总是无法成功。无奈之下,发挥一些小聪明绕开。

而我之所以能完成相关操作,也和openssl版本很相关。

特声明如下:

我的openssl版本为:

#openssl version

OpenSSL 1.0.1p 9 Jul 2015

我的操作系统版本:

# lsb_release -a
LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: RedHatEnterpriseServer
Description:    Red Hat Enterprise Linux Server release 5.5 (Tikanga)
Release:        5.5
Codename:       Tikanga


三、下载和编译以及安装

通常linux 已经自带openssl了,我本机的原先就是0.9.8 版本(使用openssl version 命令查看),但为了使用一些新的特性,我们可以下载稳定版自行编译和安装。

下载:

$ wget http://www.openssl.org/source/openssl-1.0.1p.tar.gz

使用 tar 命令解压后,放到opensslsrc 目录。

在 opensslsrc 同级建立一个 openssl,作为编译的目标安装目录(假设为 /usr/local/openssl )。

执行:

$ cd opensslsrc

$ ./config \
--prefix=/usr/local/openssl \
--openssldir=/usr/local/openssl \
disable-ec_nistp_64_gcc_128
    然后执行:
$ make depend
$ make
$ make install
至此,在你的 /usr/local/openssl 里面出现了包含 bin, tool 等一系列的文件,openssl 工具编译安装完成。目录内容类似:
drwxr-xr-x 2 root root  4096 Jun  3 08:49 bin
drwxr-xr-x 2 root root  4096 Jun  3 08:49 certs
drwxr-xr-x 3 root root  4096 Jun  3 08:49 include
drwxr-xr-x 4 root root  4096 Jun  3 08:49 lib
drwxr-xr-x 6 root root  4096 Jun  3 08:48 man
drwxr-xr-x 2 root root  4096 Jun  3 08:49 misc
-rw-r--r-- 1 root root 10835 Jun  3 08:49 openssl.cnf
drwxr-xr-x 2 root root  4096 Jun  3 08:49 private

四、生成自签名的根CA

  按照前述的 cookbook 进行操作(点击打开链接),会出现坑爹的情况。
   1. 生成key和csr:
$ openssl req -new \
    -config root-ca.conf \
    -out root-ca.csr \
    -keyout private/root-ca.key
注意:上述 root-ca.conf ,千万不要用文档里的那个例子,而必须使用 openssl 目录里的例子,在其之上,更改相关配置和路径。因为查看出错信息,基本上是说 root-ca.conf 文件不对。
   2. 自签名
$ openssl ca -selfsign \
    -config root-ca.conf \
    -in root-ca.csr \
    -out root-ca.crt \
    -extensions ca_ext
这个命令很可怕,因为会有无数错误,基本上是文件或目录不存在,找不到之类。耐心一点看错误提示,然后对照着将目录和文件建立起来。这个时候 touch 命令特别管用。
    注意配置里的:
     database	= $dir/db/index	# database index file.   
   这个配置要求  db/index 文件以及 db/index.attr 也必须事先存在。
   还有一个问题:
-extensions ca_ext 
  为了这个选项,需要在 此前的 root-ca.conf 里面追加以下内容:
[ca_ext]
basicConstraints        = critical,CA:true
keyUsage                = critical,keyCertSign,cRLSign
subjectKeyIdentifier    = hash



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值