您的位置:首页 > 运维架构

openssl 实战

2016-03-16 16:19 246 查看
一、前言因工作需要,须在某协议栈中支持TLS1.0,以提升协议的安全性。为此,对著名开源库openSSL做一番了解并打算基于其上进行开发。因实际操练过程中,发现网上的资源有许多坑,特记录以备忘,一来自用,二来可能可造福同好。二、相关文档和资源首先找到openssl官网的推荐文档:https://www.feistyduck.com/library/openssl-cookbook/online/本来打算按部就班地学习和进阶,但是不幸的是,或许因为openssl版本更迭步子太快,扯到蛋了,因此我按照步骤总是无法成功。无奈之下,发挥一些小聪明绕开。而我之所以能完成相关操作,也和openssl版本很相关。特声明如下:我的openssl版本为:#opensslversionOpenSSL1.0.1p9Jul2015我的操作系统版本:#lsb_release-aLSBVersion::core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarchDistributorID:RedHatEnterpriseServerDescription:RedHatEnterpriseLinuxServerrelease5.5(Tikanga)Release:5.5Codename:Tikanga三、下载和编译以及安装通常linux已经自带openssl了,我本机的原先就是0.9.8版本(使用opensslversion命令查看),但为了使用一些新的特性,我们可以下载稳定版自行编译和安装。下载:$wgethttp://www.openssl.org/source/openssl-1.0.1p.tar.gz使用tar命令解压后,放到opensslsrc目录。在opensslsrc同级建立一个openssl,作为编译的目标安装目录(假设为/usr/local/openssl)。执行:$cdopensslsrc
$./config\
--prefix=/usr/local/openssl\
--openssldir=/usr/local/openssl\
disable-ec_nistp_64_gcc_128
然后执行:
$makedepend
$make
$makeinstall
至此,在你的/usr/local/openssl里面出现了包含bin,tool等一系列的文件,openssl工具编译安装完成。目录内容类似:
drwxr-xr-x2rootroot4096Jun308:49bin
drwxr-xr-x2rootroot4096Jun308:49certs
drwxr-xr-x3rootroot4096Jun308:49include
drwxr-xr-x4rootroot4096Jun308:49lib
drwxr-xr-x6rootroot4096Jun308:48man
drwxr-xr-x2rootroot4096Jun308:49misc
-rw-r--r--1rootroot10835Jun308:49openssl.cnf
drwxr-xr-x2rootroot4096Jun308:49private
四、生成自签名的根CA
按照前述的cookbook进行操作(点击打开链接),会出现坑爹的情况。
1.生成key和csr:
$opensslreq-new\-configroot-ca.conf\-outroot-ca.csr\-keyoutprivate/root-ca.key
注意:上述root-ca.conf,千万不要用文档里的那个例子,而必须使用openssl目录里的例子,在其之上,更改相关配置和路径。因为查看出错信息,基本上是说root-ca.conf文件不对。
2.自签名
$opensslca-selfsign\-configroot-ca.conf\-inroot-ca.csr\-outroot-ca.crt\-extensionsca_ext
这个命令很可怕,因为会有无数错误,基本上是文件或目录不存在,找不到之类。耐心一点看错误提示,然后对照着将目录和文件建立起来。这个时候touch命令特别管用。
注意配置里的:
database	=$dir/db/index	#databaseindexfile.
这个配置要求db/index文件以及db/index.attr也必须事先存在。
还有一个问题:-extensionsca_ext
为了这个选项,需要在此前的root-ca.conf里面追加以下内容:
[ca_ext]basicConstraints=critical,CA:truekeyUsage=critical,keyCertSign,cRLSignsubjectKeyIdentifier=hash

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: