SSL协议、openSSL及创建私有CA

SSL(Secure Socket Layer,安全套接字层)是为网络通信提供安全保障和数据完整性的一种安全协议,由Netscape公司研发。SSL协议位于网络的应用层和传输层之间,它接受来自上层网络应用层协议(如http、ftp)的数据报文,并将其再一次进行封装、加密,再传递给下层网络传输层协议(如tcp、udp)。该协议提供的服务主要有:

a、数据来源可靠性:一次网络连接中的客户端和服务器都会被验证是否是对方所期望连接的主机。确保数据将被正确地发送至客户端和服务器。

b、数据机密性:数据在发送之前被加密,保证其在网络传输过程中,不会被窃取。

c、数据完整性:数据在接收之后,接收端主机会根据数据的特征码以验证数据的完整性,保证其在网络传输过程中,不会被篡改。

就SSL提供的以上服务中,以数据来源可靠性最为重要。SSL采用非对称加密算法(如RSA)来保证网络中互联双方的真实性。互联双方各拥有一对密钥,公私钥。其中公钥是公开的,网络中的任何人都可以得到任何主机或用户的公钥,而唯独私钥是保密的。且公钥是从其对应私钥中提取出来的。对于公钥加密的文件,仅能通过其对应的私钥解密,由此便保证了数据的机密性。对于私钥加密的文件,仅能通过其对应的公钥解密,由此便保证了数据来源的可靠性。

openssl便是SSL的一个开源实现。本文后续内容将简要介绍如何用openssl进行加解密、提取数据特征码、生成密钥,以及生成数字证书请求、创建私有CA和签发数字证书。


1、利用openssl进行加解密

openssl enc -ciphername [-in filename] [-out filename] [-e] [-d] ...

-ciphername指定加密算法,例如:-base64

-in filename指定要加密的文件,filename为该文件的文件名

-out filename指定将加密后的数据保存到filename指定的文件中

-e指定为加密过程,此为默认过程

-d指定为解密过程

示例:

# openssl enc -base64 -in plaintext.txt -out ciphertext.txt

采用base64加密算法将plaintext.txt文件中的数据加密,并保存到ciphertext.txt文件中。

# openssl enc -base64 -in ciphertext.txt -d

采用base64算法解密ciphertext.txt文件中的数据,并打印到显示屏幕。


2、利用openssl提取数据特征码

openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-c] [file...] ...

-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1指定提取数据特征码的单向加密算法

-c指定特征码输出格式,每两位跟上一个冒号

file指定要提取数据特征码的文件

示例:

# openssl dgst -md5 -c plaintext.txt

采用md5单项加密算法提取plaintext.txt文件的数据特征码。即使是当文件中的数据遭到微小的篡改,再次计算得出的数据特征码都会和原先的特征码大相径庭。


3、利用openssl生成密钥

openssl genrsa [-out filename] [numbits] ...

-out filename指定将生成的私钥保存到filename文件中

numbits指定私钥的长度(位数)


openssl rsa [-in filename] [-out filename] [-pubout] ...

-in filename指定私钥文件

-out filename指定将从私钥中提取出的公钥保存到filename文件中

-pubout指定从私钥中提取公钥

示例:

# (umask 077; openssl genrsa -out private.key 512)

括号中的命令将在子shell中运行。第一条命令改变子shell中的umask值,令生成的文件除属主外,其他人对他无任何权限,保证了私钥的机密性。采用RSA非对称加密算法生成512位的私钥,并将其保存到private.key文件中。

# openssl rsa -in private.key -pubout

从private.key中的私钥中提取出公钥,并打印到显示屏幕。


4、利用openssl生成数字证书请求

openssl req [-in filename] [-out filename] [-text] [-pubkey] [-new] [-newkey rss:bits] [-nodes] [-key filename] [-keyout filename] [-config filename] [-x509] [-days n] [-batch] ...

-in filename从指定文件中读取数字证书请求

-out filename将生成的数字证书请求、公钥等信息保存到指定文件中

-text以文本格式输出数字证书请求的内容

-pubkey输出公钥

-new新建数字证书请求

-newkey rsa:bits新建指定位数的RSA密钥,和-key选项互斥

-nodes配合-newkey选项,指定生成的密钥文件不加密

-key filename指定已有密钥的文件,和-newkey选项互斥

-keyout filename将生成的私钥保存到指定的文件中

-config filename指定参数文件,默认为/etc/pki/tls/openssl.cnf

-x509指定生成自签署证书

-days n配合-x509选项,指定数字证书有效期限

-batch非交互式模式

a、使用已有私钥生成证书请求

# openssl req -new -key private.key -out client.csr

使用已有RSA私钥、输入主体相关信息,生成证书请求文件,并将其保存至client.csr文件。

# openssl req -new -key private.key -out client.csr -batch -pubkey

使用已有RSA私钥生成证书请求文件,指定-batch选项,主体相关信息从配置文件中读取。并将证书请求和公钥数据保存至client.csr文件。

b、自动生成密钥和证书请求

# openssl req -new -newkey rsa:512 -out client.csr -keyout private.key -batch -pubkey

从配置文件中读取主体相关信息,自动生成512位RSA密钥和证书请求。将私钥保存至private.key文件中;将公钥和证书请求保存至client.csr文件中。

# openssl rsa -in private.key

输入保存密钥时设置的密码,解密private.key中的密钥。

# openssl req -new -newkey rsa:512 -out client.csr -keyout private.key -batch -pubkey -nodes

从配置文件中读取主体相关信息,自动生成512位RSA密钥和证书请求。将私钥保存至private.key文件中;将公钥和证书请求保存至client.csr文件中。指定-nodes选项,密钥文件不加密。

c、生成自签证书

# openssl req -new -x509 -newkey rsa:512 -out client2.crt -keyout private2.key -batch -pubkey -nodes

在自动生成证书请求命令中添加-x509选项即可。

d、查看证书请求和证书内容

# openssl req -in client.csr -text | less

查看证书请求文件的内容。

# openssl x509 -in client2.crt -text | less

查看自签证书文件的内容。


5、利用openssl创建私有CA并签发数字证书

a、根据/etc/pki/tls/openssl.cnf文件的参数配置,在/etc/pki/CA/private/目录下生成私钥,并保存为cakey.pem。

# openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048

b、根据/etc/pki/tls/openssl.cnf文件的参数配置,在/etc/pki/CA/目录下生成自签证书,并保存为cacert.pem。

# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem

c、根据/etc/pki/tls/openssl.cnf文件的参数配置,在/etc/pki/CA/目录下生成index.txt(此文件保存已签署的证书信息),serial,并向serial文件中覆盖重定向01数字(此为签署证书的编号)。

# touch /etc/pki/CA/index.txt && touch /etc/pki/CA/serial && echo 01 > /etc/pki/CA/serial

d、签署证书请求。

# openssl ca -in client.csr -out client.crt

通过查看/etc/pki/CA/index.txt文件,可发现自建的私有CA已成功签署了一份证书。


参考文献

[1] Linux.cn. (2016).openssl 证书请求和自签名命令 req 详解-技术 ◆ 学习|Linux.中国-开源社区. [online] Available at: https://linux.cn/article-7248-1.html [Accessed 10 May 2016].

[2] Wikipedia. (2016).Transport Layer Security. [online] Available at: https://en.wikipedia.org/wiki/Transport_Layer_Security [Accessed 10 May 2016].

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • CA和证书安全协议(SSL/TLS)OpenSSH 一、CA和证书 (一) PKI(Public Key Infr...
    哈喽别样阅读 1,378评论 0 0
  • 1 概述 本文之所以称之为半自动化,是因为证书的申请并非日常工作,只是一段时间才需要申请,同时,在创建证书和办法证...
    ghbsunny阅读 2,128评论 0 1
  • 1.来自维基百科上对于OpenSSL的定义: 在电脑网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以...
    uangianlap阅读 406评论 0 2
  • 今天已经是第三天七点以后起床了,因为起床了也没有特别想做的事,读书?写作?都到了一个瓶颈,看来任何事情做到中期才开...
    修远2018阅读 111评论 0 0
  • 昨天突然梦到戚娜,她坐在我旁边,一副慵懒的样子,我问她, “是想睡觉了吗?” “嗯。” 这是两个朋友之间很稀松平常...
    西原xiyuan阅读 499评论 0 2