• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

​Linux服务:安全加密软件OpenSSL使用

安全管理 彭东稳 8年前 (2015-12-17) 25162次浏览 已收录 0个评论

当了解了常用的加密类型和PKI是什么之后,接下来学习OpenSSL就会很容易理解。OpenSSL正式Linux下提供的开源CA服务器,用以签名、颁发证书,管理已签名证书和已吊销证书等。另外当你想使用公网证书时,需要到互联网上专业的CA机构申请,大概一个证书的费用几千块一年,另外如果是泛域名解析应该会更贵一点。如果是企业内部使用的话就可以使用Openssl搭建一个私有CA,也可以把自己的私有CA经过互联网上的CA服务器认证之后也接入到公网,看需求。

一、OpenSSL介绍

OpenSSLSSL的开源实现,是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。由两个年轻人开发,现在只有一个人在维护另外一个人去了RSA公司并为RSA公司实现了一种更为强大的商业版加密算法。

什么是SSL

SSLSecure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTPFTPTELNET)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

SSL在应用层和传输层之间加了一个半层,基于套接字传输时专用的,所以不是对所有的数据进行加密。Apache使用它加密HTTPSHTTP (80/tcp)->TLS->HTTPS(443/tcp)),但HTTPHTTPS是两个完全不同的协议。另外连接工具OpenSSH使用它加密SSH

OpenSSL不止是一个加密库,而且还是一个多用途、跨平台的密码加密工具。整个软件包有三部份构成:

Libcrypto:通用加密库提供了各种加密函数。

Libssl:是实现了身份验证,数据机密性和会话完整性的ssltls库。

openSSL:提供了多用途的命令行工具可以实现了各种加密和私有证书颁发机构。

密钥和证书管理?

密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。首先,OpenSSL实现了ASN.1 的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL 等数据对象的DERPEMBASE64的编解码功能。OpenSSL 提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12PKCS#8的编解码功能。OpenSSL 在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。在此基础上,OpenSSL 实现了对证书的X.509 标准编解码、PKCS#12 格式的编解码以及PKCS#7 的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。事实上,OpenSSL 提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。

PSOpenSSL由于很多软件需要依赖,所以一般默认都已经安装了。

二、OpenSSL配置文件

安装完OpenSSL后,默认配置文件在/etc/pki/tls/openssl.cnf中,信息如下:

还可以通过主配置文件添加一些默认值,那么就不用在签发证书时提供这些信息,就会直接使用提供的默认值。

​Linux服务:安全加密软件OpenSSL使用

三、OpenSSL命令使用

查看OpenSSL帮助信息,就可以看到OpenSSL支持的命令。

​Linux服务:安全加密软件OpenSSL使用

standard commands

支持的所有可使用命令,常用命令包含如下。

crl:吊销证书相关操作。

ca:CA证书相关子命令。

enc:加密解密命令。

dgst:提取特征码命令。

passwd:用户密码加密。

rand:字符串随机生成。

genrsa:生成私钥。

rsa:提取公钥。

speed:测试算法的加解密性能。

rsautl:RSA公钥加密解密。

X509:PKI相关标准X.509标准的实现源码。包括了X.509的编解码功能,证书管理功能等。

Smime:提取证书公钥。

version:查看openssl版本。

Message digest command

支持的信息摘要算法,OpenSSL实现了5种信息摘要算法,分别是MD2MD5MDC2SHASHA1)和RIPEMDSHA 算法事实上包括了SHASHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSSDSS1

Cipher commands

支持的加密算法,OpenSSL一共提供了8 种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AESDESBlowfishCASTIDEARC2RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES 使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。

OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名。当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。

OpenSSL语法

command

命令的支持就包括上面介绍的:standard commands、Message digest command、以及Cipher commands。

[ command_opts ]

四、OpenSSL使用示例

1. 对称加密算法

2. 单项散列算法

3. RSA算法

A. 公钥私钥生成

B. 加密解密

C. 数字签名

D. 签名校验

4. DSA算法

A. 公钥私钥

B. 签名校验

5. DH算法

五、OpenSSL实现私有CA并颁发证书

什么是x509证书链?

x509证书一般会用到三类文件,分别是:key,csr,crt。其中Key是私用密钥,openssl格式,通常是rsa算法实现。csr是证书请求文件,用于申请证书。在制作csr文件的时候,必须使用自己的私钥来签署申请,还可以设定一个密钥。crt是CA认证后的证书文件,签署人用自己的key给你签署的凭证。

关于证书使用的基本概念?

首先要有一个CA根证书,然后用CA根证书来签发用户证书。

用户进行证书申请:一般先生成一个私钥,然后用私钥生成证书请求(证书请求里应含有公钥信息),再利用证书服务器的CA根证书来签发证书。

特别说明:

1)自签名证书(一般用于顶级证书、根证书):证书的名称和认证机构的名称相同。

2)根证书:根证书是CA认证中心给自己颁发的证书,是信任链的起始点。任何安装CA根证书的服务器都意味着对这个CA认证中心是信任的。

数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的一个数字文件。数字证书包含证书中所标识的实体的公钥(就是说你的证书里有你的公钥),由于证书将公钥与特定的个人匹配,并且该证书的真实性由颁发机构保证(就是说可以让大家相信你的证书是真的)。因此,数字证书为如何找到用户的公钥并知道它是否有效这一问题提供了解决方案。

那么自行实现一套证书颁发流程如:CA服务器生成CA私钥(.key)–> CA服务器生成CA自签证书(.csr)–> 自签名得到根证书(.crt)(CA给自已颁发的证书)–> 客户端生成私钥 –> 客户端生成证书签名请求(.crt) –> CA服务器使用自己的证书给客户端签发证书(.pem)。

生成crt证书

1. CA生成证书

2. 客户端生成证书

.key格式:私有的密钥。

.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写。

.crt格式:证书文件,certificate的缩写。

生成pem证书

1. CA服务器生成一对秘钥

创建私钥,(umask 077)改变umask并只对此子shell有效,括号内的命令执行结束后即失效。另外 cakey.pem 名称是固定的。

2. CA服务器生成自签证书

这里 ca.ywnds.com 主机名要跟服务器的主机名保持一致,客户端访问主机时必须要通过这个主机名才能建立连接否则会报证书不可信。另外,CA的家目录没做更改的情况下,自签证书必须存放在/etc/pki/CA家目录下,且证书名称必须为cacert.pem。

-new:为生成新的证书会要求用户填写相关的信息。

-x509:通常用于自签证书、生成测试证书或用于CA自签署。

-key /path/to/keyfile:指定私钥文件。

-out /path/to/somefile:指定生成证书位置。

-days:证书申请有效期。

查看证书内容命令:

3. 为CA创建一些目录和文件

4. 客户端生成私钥

5. 客户端生成证书签名请求

证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写。

这里 http://www.test.com 主机名要跟服务器的主机名保持一致,客户端访问主机时必须要通过这个主机名才能建立连接否则会报证书不可信。在生成证书签名请求时,除了主机名和邮件地址自定义外,其余信息要与CA服务器自签证书时使用的信息一致。

6. CA服务器对请求节点证书进行签名

openssl会利用自签证书/etc/pki/CA/cacert.pem对serverCsr.pem进行签名,并生成server.pem证书,经过CA签名之后就可以部署给 http://www.test.com 主机使用。

签发证书时可能会出现:failed to update database,将 common name 设置成不同的就可以了。

这里注意,我的证书申请节点跟CA都在同一台服务器上,希望你不要搞蒙了。其实在实现环境中大概也是这样完成的,你提供域名跟邮件地址给CA提供商,然后CA提供商就会在CA服务器上完成以上操作然后把签名后的证书发送给你使用。

六、证书管理

1. 查看CA信息

每签发一个证书,签发证书的序列号就会加1。另外证书数据库中此证书为“V”,表示正在使用。

2. CA管理证书

查看证书信息。

如果需要吊销证书,要将此信息发送给CA服务管理员,管理员在核对信息无误后对证书进项吊销操作,随后你需要重新申请证书。

更新证书吊销列表。

查看吊销信息V变成R。

3. 从证书中提取公钥(RSA


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!