openssl:它支持ssl(Secure Sockets Layer,v2/v3),TLS(Transport Layer Secure,v1)。这套工具集的应用范围非常之广,包括:
- 创建和管理私钥、公钥。
- 公钥加密操作。
- 创建X.509证书(Certificate),证书请求(CSR),证书撤销(CRL)。
- 计算消息摘要(MD5,SHA-1等)。
- 使用密码加解密(Encryption/Decryptionwith Ciphers)。
- SSL/TLS 客户端/服务器测试。
- 处理S/MIME签名以及加密邮件。
- 等等.
openssl组成包括三部分:
libcrypto:加密库
libssl:TLS/SSL的实现(基于会话实现了身份认证、数据机密性、会话完成性的SSL库)
openssl:全天候、多用途的命令行工具,可以模拟实现私有颁发机构
openssl:
命令格式:openssl command [command_opts ] [ command_args ]
openssl包含众多子命令,可使用帮助来查看子命令以及子命令的选项:
查看openssl的帮助:
openssl -h:查看所有子命令
openssl rsa -h:查看rsa子命令的选项
查看openssl的版本:
openssl version
openssl version -a
openssl包含的常用子命令有:
dgst:生成消息摘要
openssl dgst [算法] /PATH/TO/FILE
speed:测试算法的性能
openssl speed [算法]
genrsa:生成RSA私有密钥
openssl genrsa -out /PATH/TO/OUT_FILE [NUMBITS]
gendsa:生成DSA私有密钥
openssl gendsa -out /PATH/TO/OUT_FILE [NUMBITS]
genpkey:生成私钥
openssl genpkey -out /PATH/TO/OUT_FILE -cipher
-cipher:私钥加密存放
ca:请求颁发证书
openssl ca -days DAYS -in /PATH/TO/CSR_FILE -out /PATH/TO/CRT_FILE
passwd:计算密钥哈希码
查看帮助:
$whatis passwd
passwd (1) - update user's authentication tokens
passwd (5) - password file
passwd [sslpasswd] (1ssl) - compute password hashes
$man sslpasswd
openssl passwd [-crypt] [-1] [-salt salt_string] [password]
req:PKCS#10证书请求颁发和证书生成工具
PKCS(Public-KeyCryptography Standards)有很多种类,openssl工具集中也有一系列名为pkcs#x的工具。常见的如:
PKCS#7,加密信息语法标准(CryptographyMessage Syntax Standard)。用于签名或加密消息,是S/MIME的基石。
PKCS#10,证书签署请求(CSR)。
PKCS#12,个人信息交换语法标准(PersonalInformation Exchange Syntax Standard)。
openssl req [options]:
-new
生成新的证书请求。如果没有-key 参数,则会生成新的RSA私钥。
-keyfile
私钥文件。
-nodes
如果要生成私钥,则不对私钥加密(将命令理解为 no des)。
-x509
生成一个自签名证书,而非一个证书签署请求。
-text
以文本方式查看证书内容
生成证书签署请求(CSR)与生成证书
方法1 :用opensslgenrsa生成私钥,用openssl req生成证书签署请求:
$openssl genrsa -out s.key 1024
$openssl req -new -key s.key -out s.csr
方法2 :用req生成私钥,并生成证书签署请求:
$openssl req -newkey rsa:1024 -keyout s.key -out s.csr -nodes
注意,这里加了-nodes选项,否则要求输入密码保护私钥。
方法3 跳过CSR,直接生成证书:
$openssl req -x509 -nodes -days 365 \
-subj'/C=CN/ST=BeiJing/L=HaiDian/CN=www.berlinix.com' \
-newkeyrsa:1024 -keyout s.key -out s.crt
x509:私有证书颁发管理命令
生成私有CRT:
openssl x509 -req -days DAYS -in /PATH/TO/CSR_FILE -signkey /PATH/TO/KEY_FILE -out/PATH/TO/CRT_FILE
查看私有CRT:
openssl x509 -text -in /PATH/TO/CRT_FILE
s_client:作为SSL/TLS客户端运行
openssl s_client [-connect host:port] [-verify depth] [-cert filename] [-certformDER|PEM] [-key filename] [-CApath directory] [-CAfile filename]
s_server:作为SSL/TLS服务器运行
openssl s_server [-accept port] [-context id][-verify depth][-Verify depth] [-crl_check] [-crl_check_all] [-cert filename][-key keyfile] [-CApath directory] [-CAfile filename]
用s_server/s_client测试证书
用s_server建立服务器:
$ openssl s_server -cert s.crt -key s.key -www
用s_client作为客户端:
$ openssl s_client -connect localhost:443
s_time:SSL连接的性能测试。
openssl s_time -connect www.google.com:443
enc:加密
openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin
建立本地私有证书颁发机构:
n 切换到CA证书目录下
cd/etc/pki/CA
n 2.根据配置文件(/etc/pki/tls/openssl.cnf)创建文件夹和相应文件
mkdir newcerts private
touch crl.pem crlnumber index.txt serial
n 3.serial文件存放发放的证书的编号,为serial建立初始编号
echo 01 > serial
n 4.生成RSA私钥cakey.pem:
(umask0077;openssl genrsa -out /PATH/TO/KEYFILE NUMBITS) 注意:生成的私钥文件权限需为0600
n 5.生成CA证书cacert.pem:
openssl req -new -x509 -days 500 -key ./private/cakey.pem -out cacert.pem
n 6.生成CA证书颁发请求cacert.csr:
openssl req -new -x509 -days 500 -key ./private/cakey.pem -out cacert.csr
n 7.生成CA证书CRT cacert.crt:
openssl x509 -req -days 500 -in cacert.csr -signkey ./private/cakey.pem -out cacert.crt
根据提示输入相关的证书注册信息,注意主机名一定要和当前主机名一致;
设置证书注册信息的默认值:vim /etc/pki/tls/openssl.cnf
在[req_distinguished_name]下填入相应的信息即可。
查看证书CRT:
openssl x509 -text -in cacert.crt
第三方请求CA颁发证书:
n 1.创建第三方证书存放目录:
cd/etc/httpd
mkdirssl
cd./ssl
n 2.生成第三方私钥:
openssl genrsa -out httpd.pem
n 3.生成第三方CSR:
openssl req -new -x509 -key httpd.pem -out httpd.csr
n 4.请求CA颁发证书:
openssl ca -days 500 -in httpd.csr -out httpd.crt
根据提示手动输入请求认证信息,主机名应当和当前主机名保持一致。
n 5.查看CA颁发中心记录:
cd/etc/pki/CA
cat serial :serial 里保存的序号已经自增1了
ls newcerts:newcerts文件夹里生成了01.pem的文件,它记录的是为httpd颁发的证书的相关信息
生成测试证书:
在/etc/pki/tls/certs/目录下,执行make *.crt/*.pem/*.csr/*.key等命令,根据目标生成文件的后缀名可以快速生成相应的测试用的证书
如生成的*.crt证书中既包含CRT,又包含私钥,所以只能做测试用。