什么是证书?

  它是用来证明某某东西确实是某某东西的东西。通俗地说,证书就好比公章。通过公章,可以证明相关文件确实是对应的公司发出的。

  理论上,人人都可以找个证书工具,自己做一个证书。

什么是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.安装相关工具:openssl
yum 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种分组加密算法分别是AESDESBlowfishCASTIDEARC2RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。

非对称加密

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

OpenSSL 是一个开源项目,其组成主要包括一下三个组件:

  1. openssl:多用途的命令行工具
  2. libcrypto:加密算法库
  3. libssl:加密模块应用库,实现了ssl及tls

openssl可以实现:秘钥证书管理、对称加密和非对称加密更多简介和官网。

指令

平时我们使用openssl最多的莫过于使用指令了,而最为常见的几个指令如下:

  1. genrsa 生成RSA参数
  2. req
  3. x509
  4. rsa
  5. 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 输出文件位置

Linuxæ­å»ºCAæå¡

 

node1节点

二、客户机申请证书

1、生成私钥

(umask 066;openssl genrsa -out app.key 1024)

2、生成申请文件:

 openssl req -new -key app.key -out app.csr

     证书申请一般通用csr

Linuxæ­å»ºCAæå¡

红色箭头前三个必须和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

Linuxæ­å»ºCAæå¡

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目录下执行以下操作:

  1. echo 01 > serial
  2. touch index.txt
  3. openssl req -new -x509 -newkey rsa:1024 -keyout CA.key -out CA.pem (生成自签名CA证书)

向ca0-server申请的公司(node1)

2. 客户端证书请求

  1. openssl req -new -newkey rsa:1024 -keyout ddmdd_a.key -out ddmdd_a.req (生成ddmdd_a的密钥和证书请求,注意: 此处所填写的用户信息必须与CA证书信息完全一致)
  2. openssl rsa -in ddmdd_a.key -pubout -out ddmdd_a.pub (导出公钥)

 

把2中的ddmdd_a.req scp到ca-server中,然后在ca-server中操作

3. 为客户签发证书

  1. openssl ca -keyfile CA.key -cert CA.pem -in ddmdd_a.req -out ddmdd_a.pem -notext (使用CA密钥和证书为ddmdd_a签发证书ddmdd_a.pem)
  2. openssl ca -keyfile CA.key -cert CA.pem -in subca_rsareq.pem -out subca.pem -notext (签发二级CA证书)

4. 转换证书格式

  1. openssl x509 -inform pem -outform der -in ddmdd_a.pem -out ddmdd_a.der
  2. openssl pkcs12 -export -in ddmdd_a.pem -inkey ddmdd_a_rsakey.pem -out ddmdd_a.pfx
  3. openssl pkcs12 -in ddmdd_a.pfx -out ddmdd_a.pem
  4. openssl rsa -in ddmdd_a.key -out ddmdd_a_open.key (删除私钥密码)

5. 生成证书撤消列表

  1. echo 01 > crlnumber
  2. openssl ca -keyfile  CA.key -cert CA.pem -revoke ddmdd_a.pem (从CA中撤消证书ddmdd_a.pem)
  3. openssl ca -gencrl -keyfile CA.key -cert CA.pem -out CA.crl (生成或更新证书撤消列表)

6. 查看证书信息

  1. openssl x509 -in CA.pem -noout –text


二、DSA方式

1. 建立CA根证书 1) 建立目录DSA 2) 创建以下子目录certs, crl, newcerts 3) 在DSA目录下执行以下操作:

  1. echo 01 > serial
  2. touch index.txt
  3. openssl dsaparam -out CA.para 1024 (生成dsa参数文件)
  4. openssl req -new -x509 -newkey dsa:CA.para -keyout CA.key -out CA.pem (使用dsa参数生成自签名CA证书)

2. 客户端证书请求

  1. openssl dsaparam -out ddmdd_b.para 1024 (生成dsa参数文件)
  2. openssl req -new -newkey dsa:ddmdd_b.para -keyout ddmdd_b.key -out ddmdd_b.req (使用dsa参数生成ddmdd_b的密钥和证书请求,注意: 此处所填写的用户信息必须与CA证书信息完全一致)
  3. openssl dsa -in ddmdd_b.key -pubout -out ddmdd_b.pub (导出公钥)

3. 为客户签发证书

    1. 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

https://www.cnblogs.com/Presley-lpc/p/9776463.html

Logo

更多推荐