OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library.
openssl是https的基础,在TCP与应用http之间增加了一层数据加密(SSL/TLS)。
SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
SSL和TLS都包含两层协议:记录协议和握手协议。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
1. 命令简介
# 生成密钥
$ openssl genrsa ...
# 密钥相关操作,如:查看、去掉密码等
$ openssl rsa ...
# “签名请求证书”相关操作,如:生成、查看等
$ openssl req ...
# “证书”相关操作,如:生成、查看等
$ openssl x509 ...
# 计算哈希值
$ openssl md5 ...
$ openssl sha1 ...
2. 常用场景
创建密钥对
# 创建私钥 $ openssl genrsa -out rsa_1024_priv.pem 1024 # 根据私钥得到公钥 $ openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
自签名证书
# 1.生成私钥 $ openssl genrsa -des3 -out server.key 1024 # 2.从秘钥中删除 Passphrase $ cp server.key server.key.org $ openssl rsa -in server.key.org -out server.key # 3.生成 CSR (Certificate Signing Request) $ openssl req -new -key server.key -out server.csr # 4.生成自签名证书 $ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
自签名CA证书
# 1.创建 CA 私钥 $ openssl genrsa -des3 -out ca.key 4096 # 2.生成 CA 的自签名证书 $ openssl req -new -x509 -days 365 -key ca.key -out ca.crt # 3.生成需要颁发证书的私钥 $ openssl genrsa -des3 -out server.key 4096 # 4.生成要颁发证书的证书签名请求,证书签名请求当中的 Common Name 必须区别于 CA 的证书里面的 Common Name $ openssl req -new -key server.key -out server.csr # 5.用 2 创建的 CA 证书给 4 生成的 签名请求 进行签名 $ openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
计算哈希值
# 计算文件 MD5 值
$ openssl md5 myfile.txt
# 计算文件 SHA1 值
$ openssl sha1 myfile.txt
# 计算文件 SHA256 值
$ openssl sha1 -sha256 myfile.txt
证书校验
验证一个证书是否是某一个 CA 签发,文件格式必须为 PEM
# 验证一个证书是否是某一个CA签发,文件格式必须为 PEM
$ openssl verify -CAfile cafile.pem apache.crt
可通过openssl提供的s_server和s_client验证证书。
服务器端开启ssl测试服务:
openssl s_server -msg -state -cert cert.pem -key key.pem -accept 18444
客户端验证
openssl s_client -msg -state -showcerts -cert client.cert -key client.key -connect localhost:18444
验证服务器是否使用自签名CA颁发的HTTPS证书
openssl s_client -connect test.com:28082 -CAfile ca.crt
其他
# 查看私钥信息 $ openssl rsa -noout -text -in server.key # 查看签名请求信息 $ openssl req -noout -text -in server.csr # 查看ca的私钥信息 $ openssl rsa -noout -text -in ca.key # 查看证书信息 $ openssl x509 -noout -text -in ca.crt # 查看一个证书吊销列表信息 $ openssl crl -text -in xx.crl # 查看一个证书的额外信息 $ openssl x509 -purpose -in cacert.pem # 查看一个公钥的信息 $ openssl rsa -noout -text -pubin -in apache.pub
1. openssl,https,ssl,tls百科
3. OpenSSL 的常用方法 简书