什么是证书?
它是用来证明某某东西确实是某某东西的东西。通俗地说,证书就好比公章。通过公章,可以证明相关文件确实是对应的公司发出的。
理论上,人人都可以找个证书工具,自己做一个证书。
什么是CA?
CA全称Certificate Authority,也叫“证书授权中心”。它是负责管理和签发证书的第三方机构。
什么是CA证书?
CA证书,就是CA颁发的证书。
前面说了,人人都可以找工具制作证书。但是制作出来的证书是没用的,因为不具备权威性。
什么是CA认证?
CA认证,即CA认证机构,为电子签名相关各方提供真实性、可靠性验证的行为。
什么是CA证书?
证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。
CA证书类型?
- 证书颁发机构自签名证书
- 服务器证书
- 用户证书
证书的签发过程
a.服务方 S 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证
b.CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等
c.如信息审核通过,CA 会向申请者签发认证文件-证书。
证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名
签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名
d.客户端 C 向服务器 S 发出请求时,S 返回证书文件
e.客户端 C 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;
f.客户端然后验证证书相关的域名信息、有效时间等信息
g.客户端会内置信任 CA 的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA 的证书,证书也会被判定非法。
在这个过程注意几点
1.申请证书不需要提供私钥,确保私钥永远只能服务器掌握
2.证书的合法性仍然依赖于非对称加密算法,证书主要是增加了服务器信息以及签名
3.内置 CA 对应的证书称为根证书,颁发者和使用者相同,自己为自己签名,即自签名证书
证书=公钥+申请者与颁发者信息+签名
CA证书常用于https (SSL加密)
CentOS 7为服务器
CentOS 6为申请CA证书的客户机
Linux系统如何搭建CA服务?
1.安装相关工具:opensslyum install openssl -y
2.openssl相关配置文件:/etc/pki/tls/openssl.cnf
指定默认使用的CA
[ ca ]
default_ca = CA_default # The default ca section
CA的相关配置
[ CA_default ]
dir = /etc/pki/CA # Where everything is kept,CA的工作目录
certs = $dir/certs # Where the issued certs are kept,已经颁发的证书存放目录
crl_dir = $dir/crl # Where the issued crl are kept,证书吊销列表存放目录
database = $dir/index.txt # database index file,证书的索引数据库
new_certs_dir = $dir/newcerts # default place for new certs,新证书存放目录
certificate = $dir/cacert.pem # The CA certificate,CA证书
serial = $dir/serial # The current serial number,当前证书编号
crlnumber = $dir/crlnumber # the current crl number,当前吊销证书编号
crl = $dir/crl.pem # The current CRL,当前的吊销证书
private_key = $dir/private/cakey.pem # The private key,CA私钥
RANDFILE = $dir/private/.rand # private random number file,随机文件
default_days = 365 # how long to certify for,证书有效期
default_crl_days= 30 # how long before next CRL,发布证书 吊销列表的周期
default_md = sha256 # use SHA-256 by default,算法
preserve = no # keep passed DN ordering
policy = policy_match #选择使用的策略类型
\# For the CA policy
[ policy_match ] #第一种策略
countryName = match #是否匹配国家
stateOrProvinceName = match #是否匹配省
organizationName = match #是否匹配组织名称
organizationalUnitName = optional #是否单元名称
commonName = supplied #通用名
emailAddress = optional #邮箱
# For the 'anything' policy
# At this point in time, you must list all acceptable 'object'
# types.
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
3.CA证书有以下多种生成ca证书的工具:seasyrsa、openssl、cfssl、gnoMint 、tinyca2、DogTag、OpenCA、r509、XCA、EJBCA 网络版证书中心、SimpleAuthority (https://www.jianshu.com/p/fdea72ae90a0)
4、我目前使用的openssl做测试案例,其他请自己寻找使用方式
openssl 的加密算法
对称加密
OpenSSL
一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES
、DES
、Blowfish
、CAST
、IDEA
、RC2
、RC5
,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。
非对称加密
OpenSSL
一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
OpenSSL
是一个开源项目,其组成主要包括一下三个组件:
openssl
:多用途的命令行工具libcrypto
:加密算法库libssl
:加密模块应用库,实现了ssl及tls
openssl
可以实现:秘钥证书管理、对称加密和非对称加密更多简介和官网。
指令
平时我们使用openssl
最多的莫过于使用指令了,而最为常见的几个指令如下:
genrsa
生成RSA参数req
x509
rsa
ca
genrsa
简介
平时主要用来生成私钥,选择使用的算法、对称加密密码和私钥长度来生成私钥。
基本用法:
openssl genrsa [args] [numbits]
其中常见的参数:【更多参数查看:openssl genrsa -help】
args1 对生成的私钥文件是否要使用加密算法进行对称加密:
-des : CBC模式的DES加密
-des3 : CBC模式的3DES加密
-aes128 : CBC模式的AES128加密
-aes192 : CBC模式的AES192加密
-aes256 : CBC模式的AES256加密
args2 对称加密密码
-passout passwords
其中passwords为对称加密(des、3des、aes)的密码(使用这个参数就省去了console交互提示输入密码的环节)
args3 输出文件
-out file : 输出证书私钥文件
[numbits]: 密钥长度,理解为私钥长度
生成一个2048位的RSA私钥,并用des3加密(密码为123456),保存为server.key文件
生成私钥(ca-server和node1节点使用)
openssl genrsa -des3 -passout pass:123456 -out server.key 1024
// -des3 是第一个参数args1;
// -passout pass:123456 是第二个参数写法 args2
// -out server.key 第三个参数args3;
// 2048 最后一个[numbits]参数
req
req
的基本功能主要有两个:生成证书请求和生成自签名证书,当然这并不是其全部功能,但是这两个最为常见;
常见使用方法:
openssl req [args] outfile
主要参数:【更多参数查看:openssl req -help】
args1 是输入输入文件格式:-inform arg
-inform DER 使用输入文件格式为DER
-inform PEM 使用输入文件格式为PEM
args2 输出文件格式:-outform arg
-outform DER 使用输出文件格式为DER
-outform PEM 使用输出文件格式为PEM
args3 是待处理文件
-in inputfilepath
args4 待输出文件
-out outputfilepath
args5 用于签名待生成的请求证书的私钥文件的解密密码
-passin passwords
args6 用于签名待生成的请求证书的私钥文件
-key file
args7指定输入密钥的编码格式 -keyform arg
-keyform DER
-keyform NET
-keyform PEM
args8 生成新的证书请求
-new
args9输出一个X509格式的证书,签名证书时使用
-x509
args10使用X509签名证书的有效时间
-days // -days 3650 有效期10年
args11生成一个bits长度的RSA私钥文件,用于签发【生成私钥、并生成自签名证书】
-newkey rsa:bits
args12设置HASH算法-[digest]【生成私钥指定的hash摘要算法】
-md5
-sha1 // 高版本浏览器开始不信任这种算法
-md2
-mdc2
-md4
args13指定openssl配置文件,很多内容不容易通过参数配置,可以指定配置文件
-config filepath
args14 显示格式txt【用于查看证书、私钥信息】
-text
使用的案例:利用私钥生成证书请求csr
在node1节点使用,在向ca服务器申请的那台机器上面执行
openssl req -new -key server.key -out server.csr
使用案例:利用私钥生成自签名证书
这是在ca服务器上面进行执行的
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
x509
x509
是一个功能很丰富的证书处理工具。可以用来显示证书的内容,转换其格式,给CSR签名等X.509证书的管理工作;
用法如下:
openssl x509 [args]
参数如下:【更多参数查看:openssl x509 -help】
args1 是输入输入文件格式:-inform arg
-inform DER 使用输入文件格式为DER
-inform PEM 使用输入文件格式为PEM
args2 输出文件格式:-outform arg
-outform DER 使用输出文件格式为DER
-outform PEM 使用输出文件格式为PEM
args3 是待处理X509证书文件
-in inputfilepath
args4 待输出X509证书文件
-out outputfilepath
args5表明输入文件是一个"请求签发证书文件(CSR)",等待进行签发
-req
args6签名证书的有效时间
-days // -days 3650 有效期10年
args7 指定用于签发请求证书的根CA证书
-CA arg
args8 根CA证书格式(默认是PEM)
-CAform arg
args9 指定用于签发请求证书的CA私钥证书文件
-CAkey arg
args10 指定根CA私钥证书文件格式(默认为PEM格式)
-CAkeyform arg
args11 指定序列号文件(serial number file)
-CAserial arg
args12 如果序列号文件(serial number file)没有指定,则自动创建它
-CAcreateserial
args13设置HASH算法-[digest]【生成私钥指定的hash摘要算法】
-md5
-sha1 // 高版本浏览器开始不信任这种算法
-md2
-mdc2
-md4
使用实例: 使用根CA证书[ca.crt]和私钥[ca.key]对"请求签发证书"[server.csr]进行签发,生成x509格式证书
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out serverx509.crt
server.csr:想ca申请ca证书的那台服务器传给ca服务器的
ca.crt:ca服务器上面的(openssl req -new -x509 -key /etc/pki/CA/private/ca.pem -out /etc/pki/CA/ca.crt -days 365 自签名生成的)
ca.key:ca服务器申请的私钥(umask 077;openssl genrsa -out /etc/pki/CA/private/ca.key2048)
参考1:openssl详解
参考3:openssl介绍
参考2:自签名证书实践
参考https://segmentfault.com/a/1190000014963014
ca-server节点
一、搭建一台CA服务器
CA证书根目录/etc/pki/CA
1、创建索引数据库文件和指定证书编号
touch /etc/pki/CA/index.txt
echo 01 >/etc/pki/CA/serial
touch /etc/pki/CA/index.txt 生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号
2、CA自签名证书
2.1、生成私钥:
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
()代表在子bash中运行,目的是为了不改变当前Shell中的umask值
genrsa 生成私钥
-out 私钥的存放路径 cakey.pem 为密钥名需与配置文件中一致,配置文件是openssl.conf
2048 密钥长度
2.2、生成自签名证书:
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
req 生成证书签署请求
-x509 生成自签署证书
-days n 证书的有效天数
-new 新请求
-key /path/to/keyfile 指定私钥文件
-out /path/to/somefile 输出文件位置
node1节点
二、客户机申请证书
1、生成私钥
(umask 066;openssl genrsa -out app.key 1024)
2、生成申请文件:
openssl req -new -key app.key -out app.csr
证书申请一般通用csr
红色箭头前三个必须和CA服务器一致
3、把签署请求文件发送给CA服务器
scp app.csr ca-server:/etc/pki/CA/
三、CA服务器签署证书
1、在CA服务器上签署证书,CA服务器为客户端颁发证书
openssl ca -in app.csr -out certs/app.crt -days 100
2、发送给客户机申请者,将生成的证书发送给申请的客户端
scp certs/app.crt 192.168.128.129:
四、吊销证书
(一)在ca-server节点上面请求吊销node1证书
1、获取证书serial
openssl x509 -in certs/app.crt -noout -serial -subject
x509 证书格式
-in 要吊销的证书
-noout 不输出额外信息
-serial 显示序列号
-subject 显示subject信息
(二)CA验证信息
1、确认提交的serial和subject信息与index.txt文件中的信息是否一致
2、吊销证书
-revoke 删除证书
查看被吊销的证书列表
3、指定吊销证书的编号(如果是第一次吊销)。根据1步骤中得到的编号
4、更新证书吊销列表、生成吊销列表
openssl ca -gencrl -out /etc/pki/CA/crl.pem
-gencrl 生成证书吊销列表
5、查看crl文件内容
-text 以文本形式显示
注意事项:
1.必须要提前创建证书数据库引导文件/etc/pki/CA/index.txt
2.指定证书编号,证书颁发完成后会自动更新证书序号
参考
1、https://www.linuxidc.com/Linux/2018-01/150210.htm
2、https://blog.51cto.com/zchui/2325311?source=dra
openssl生成证书以及获取公钥和私钥
一、RSA方式
ca-server(ca服务端)
1. 建立CA根证书 1) 建立目录RSA 2) 创建以下子目录certs, crl, newcerts 3) 在RSA目录下执行以下操作:
- echo 01 > serial
- touch index.txt
- openssl req -new -x509 -newkey rsa:1024 -keyout CA.key -out CA.pem (生成自签名CA证书)
向ca0-server申请的公司(node1)
2. 客户端证书请求
- openssl req -new -newkey rsa:1024 -keyout ddmdd_a.key -out ddmdd_a.req (生成ddmdd_a的密钥和证书请求,注意: 此处所填写的用户信息必须与CA证书信息完全一致)
- openssl rsa -in ddmdd_a.key -pubout -out ddmdd_a.pub (导出公钥)
把2中的ddmdd_a.req scp到ca-server中,然后在ca-server中操作
3. 为客户签发证书
- openssl ca -keyfile CA.key -cert CA.pem -in ddmdd_a.req -out ddmdd_a.pem -notext (使用CA密钥和证书为ddmdd_a签发证书ddmdd_a.pem)
- openssl ca -keyfile CA.key -cert CA.pem -in subca_rsareq.pem -out subca.pem -notext (签发二级CA证书)
4. 转换证书格式
- openssl x509 -inform pem -outform der -in ddmdd_a.pem -out ddmdd_a.der
- openssl pkcs12 -export -in ddmdd_a.pem -inkey ddmdd_a_rsakey.pem -out ddmdd_a.pfx
- openssl pkcs12 -in ddmdd_a.pfx -out ddmdd_a.pem
- openssl rsa -in ddmdd_a.key -out ddmdd_a_open.key (删除私钥密码)
5. 生成证书撤消列表
- echo 01 > crlnumber
- openssl ca -keyfile CA.key -cert CA.pem -revoke ddmdd_a.pem (从CA中撤消证书ddmdd_a.pem)
- openssl ca -gencrl -keyfile CA.key -cert CA.pem -out CA.crl (生成或更新证书撤消列表)
6. 查看证书信息
- openssl x509 -in CA.pem -noout –text
二、DSA方式
1. 建立CA根证书 1) 建立目录DSA 2) 创建以下子目录certs, crl, newcerts 3) 在DSA目录下执行以下操作:
- echo 01 > serial
- touch index.txt
- openssl dsaparam -out CA.para 1024 (生成dsa参数文件)
- openssl req -new -x509 -newkey dsa:CA.para -keyout CA.key -out CA.pem (使用dsa参数生成自签名CA证书)
2. 客户端证书请求
- openssl dsaparam -out ddmdd_b.para 1024 (生成dsa参数文件)
- openssl req -new -newkey dsa:ddmdd_b.para -keyout ddmdd_b.key -out ddmdd_b.req (使用dsa参数生成ddmdd_b的密钥和证书请求,注意: 此处所填写的用户信息必须与CA证书信息完全一致)
- openssl dsa -in ddmdd_b.key -pubout -out ddmdd_b.pub (导出公钥)
3. 为客户签发证书
-
- openssl ca -keyfile CA.key -cert CA.pem -in ddmdd_b.req -out ddmdd_b.pem -notext (使用CA密钥和证书为ddmdd_b签发证书ddmdd_b.pem)
三、获取公钥和私钥
a) 通过以上方法的生成证书的,可以通过一下命令获得公钥和私钥。
导出公钥:
DSA方式:openssl dsa -in ddmdd_b.key -pubout -out ddmdd_b.pub.pem RSA方式:openssl rsa -in ddmdd_a.key -pubout -out ddmdd_a.pub.pem
导出私钥:
openssl rsa -in server.key -text > private.pem
b)直接生成公钥和私钥:
openssl genrsa -out private.pem 1024
openssl pkcs8 -nocrypt -topk8 -in private.pem -out pkcs8.pem
openssl rsa -pubout -in private.pem public.pem
参考:https://blog.csdn.net/honeying/article/details/79067507
OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。在OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。由于这是互联网应用最广泛的安全传输方法,被网银、在线支付、电商网站、门户网站、电子邮件等重要网站广泛使用,所以该漏洞影响范围广大。
OpenSSL有两种运行模式:交互模式和批处理模式。
直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处理模式。
OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
对称加密算法
OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。
非对称加密算法
OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
信息摘要算法
OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。
密钥和证书管理
密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。
首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。
在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。
事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。
实例
1、消息摘要算法应用例子
用SHA1算法计算文件file.txt的哈西值,输出到stdout:
# openssl dgst -sha1 file.txt
用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt:
# openssl sha1 -out digest.txt file.txt
用DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin。签名的private key必须为DSA算法产生的,保存在文件dsakey.pem中。
# openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt
用dss1算法验证file.txt的数字签名dsasign.bin,验证的private key为DSA算法产生的文件dsakey.pem。
# openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt
用sha1算法为文件file.txt签名,输出到文件rsasign.bin,签名的private key为RSA算法产生的文件rsaprivate.pem。
# openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt
# 用sha1算法验证file.txt的数字签名rsasign.bin,验证的public key为RSA算法生成的rsapublic.pem。
# openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt
2、对称加密应用例子
对称加密应用例子,用DES3算法的CBC模式加密文件plaintext.doc,加密结果输出到文件ciphertext.bin。
# openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin
用DES3算法的OFB模式解密文件ciphertext.bin,提供的口令为trousers,输出到文件plaintext.doc。注意:因为模式不同,该命令不能对以上的文件进行解密。
# openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers
用Blowfish的CFB模式加密plaintext.doc,口令从环境变量PASSWORD中取,输出到文件ciphertext.bin。
# openssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:PASSWORD
给文件ciphertext.bin用base64编码,输出到文件base64.txt。
# openssl base64 -in ciphertext.bin -out base64.txt
用RC5算法的CBC模式加密文件plaintext.doc,输出到文件ciphertext.bin,salt、key和初始化向量(iv)在命令行指定。
# openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29
3、Diffie-Hellman应用例子
使用生成因子2和随机的1024-bit的素数产生D0ffie-Hellman参数,输出保存到文件dhparam.pem
# openssl dhparam -out dhparam.pem -2 1024
从dhparam.pem中读取Diffie-Hell参数,以C代码的形式,输出到stdout。
# openssl dhparam -in dhparam.pem -noout -C
4、DSA应用例子应用例子
生成1024位DSA参数集,并输出到文件dsaparam.pem。
# openssl dsaparam -out dsaparam.pem 1024
使用参数文件dsaparam.pem生成DSA私钥匙,采用3DES加密后输出到文件dsaprivatekey.pem
# openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem
使用私钥匙dsaprivatekey.pem生成公钥匙,输出到dsapublickey.pem
# openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem
从dsaprivatekey.pem中读取私钥匙,解密并输入新口令进行加密,然后写回文件dsaprivatekey.pem
# openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin
5、RSA应用例子
产生1024位RSA私匙,用3DES加密它,口令为trousers,输出到文件rsaprivatekey.pem
# openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024
从文件rsaprivatekey.pem读取私匙,用口令trousers解密,生成的公钥匙输出到文件rsapublickey.pem
# openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem
用公钥匙rsapublickey.pem加密文件plain.txt,输出到文件cipher.txt
# openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt
使用私钥匙rsaprivatekey.pem解密密文cipher.txt,输出到文件plain.txt
# openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt
用私钥匙rsaprivatekey.pem给文件plain.txt签名,输出到文件signature.bin
# openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin
用公钥匙rsapublickey.pem验证签名signature.bin,输出到文件plain.txt
# openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain
从X.509证书文件cert.pem中获取公钥匙,用3DES加密mail.txt,输出到文件mail.enc
# openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem
从X.509证书文件cert.pem中获取接收人的公钥匙,用私钥匙key.pem解密S/MIME消息mail.enc,结果输出到文件mail.txt
# openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt
cert.pem为X.509证书文件,用私匙key,pem为mail.txt签名,证书被包含在S/MIME消息中,输出到文件mail.sgn
# openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn
验证S/MIME消息mail.sgn,输出到文件mail.txt,签名者的证书应该作为S/MIME消息的一部分包含在mail.sgn中
# openssl smime -verify -in mail.sgn -out mail.txt
https://blog.csdn.net/margin_0px/article/details/82462148
8.单向认证双向认证
何为SSL/TLS单向认证,双向认证?
单向认证指的是只有一个对象校验对端的证书合法性。
通常都是client来校验服务器的合法性。那么client需要一个ca.crt,服务器需要server.crt,server.key
双向认证指的是相互校验,服务器需要校验每个client,client也需要校验服务器。
server 需要 server.key 、server.crt 、ca.crt
client 需要 client.key 、client.crt 、ca.crt