目录
频道首页
📚 openssl与CA证书
收藏
0
xy20118 最近修改于 2024-08-09 16:42:28

前言

官网:https://www.openssl.org/ OpenSSL计划在1998年开始,其目标是发明一套自由的加密工具,在互联网上使用。OpenSSL以Eric Young以及Tim Hudson两人开发的SSLeay为基础,随着两人前往RSA公司任职,SSLeay在1998年12月停止开发。因此在1998年12月,社群另外分支出OpenSSL,继续开发下去

定义概念

OpenSSL是一个加密工具包,用于实现安全套接字层(Secure Sockets Layer:SSL v2/v3)传输层安全性(Transport Layer Security:TLS v1)网络协议及其所需的相关加密标准。

注意: 虽然OpenSSL工具可以使用SM2算法来生成并校验证书,但是在TLS握手过程中主要支持RSA和ECC算法作为公钥加密算法,不支持SM2算法,因此无法在TLS加密连接中使用SM2证书。

包括三个组件:

  • libcrypto:用于实现加密和解密的库
  • libssl:用于实现ssl通信协议的安全库
  • openssl:多用途命令行工具

opsenssl用途

应用

  • 私钥、公钥和相关参数的创建和管理。
  • 公钥加密操作。
  • X.509证书、CSR和CRL的创建。
  • 消息挖掘的计算。
  • 密码的加解密。
  • SSL/TLS客户端和服务器测试。
  • S/MIME签名或加密邮件的处理。
  • 时间戳请求、生成和验证。

openssl命令

两种运行模式:

  • 交互模式
  • 批处理模式 命令+选项

三种子命令:

  • 标准命令
  • 消息摘要命令
  • 加密命令
#centos 默认版本
openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

#ubuntu默认版本
openssl version
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

标准命令解析

image

asn1parse:解析ASN.1序列。 
ca:证书颁发机构(Certificate Authority,CA)管理。
ciphers:加密套件描述确定。
cms:CMS(Cryptographic Message Syntax,加密消息语法)实用程序。
crl:**证书吊销列表(Certificate Revocation List,CRL)**管理。
dgst:消息摘要计算(Message Digest Calculation)。 
dh:Diffie-Hellman参数管理,已被dhparam淘汰。
dhparam:Diffie-Hellman参数的生成和管理。被genpkey和pkeyparam取代。
dsa:DSA数据管理。
dsaparam:DSA参数生成和管理,被genpkey和pkeyparam取代。
ec:**EC(Elliptic curve,椭圆曲线)**密钥处理。
ecparam:EC参数操作和生成。
enc:使用加密套件进行编码。
engine:引擎(可装载模块)信息和操作。
errstr:错误编号到错误字符串的转换。
gendh:Diffie-Hellman参数的生成,已被dhparam淘汰。
gendsa:根据参数生成DSA私钥。被genpkey和pkey取代。
genpkey:私钥或参数的生成。
genrsa:RSA私钥的生成。被genpkey取代。
nseq:创建或检查netscape证书序列。
ocsp:联机证书状态协议实用程序。
passwd:生成哈希密码。
pkcs12:PKCS#12数据管理。
pkcs7:PKCS#7数据管理。
pkey:公钥和私钥管理。
pkeyparam:公钥算法参数管理。
pkeyutl:公钥算法加密操作实用程序。

image

rand:生成伪随机字节。
req:PKCS#10 X.509**证书签名请求(Certificate Signing Request,CSR)**管理。
rsa:RSA密钥管理。
rsautl:RSA用于签名、验证、加密和解密的实用工具。被pkeyutl取代
s_client:这实现了一个通用的SSL/TLS客户端,它可以建立到使用SSL/TLS的远程服务器的透明连接。它仅用于测试目的,仅提供基本的接口功能,但在内部主要使用OpenSSL ssl库的所有功能。
s_server:这实现了一个通用的SSL/TLS服务器,它接受来自使用SSL/TLS的远程客户端的连接。它仅用于测试目的,仅提供基本的接口功能,但在内部主要使用OpenSSL ssl库的所有功能。它既提供了自己的面向命令行的协议来测试SSL功能,也提供了一个简单的HTTP响应工具来模拟支持SSL/TLS的Web服务器。
s_time:SSL连接计时器。
sess_id:SSL会话数据管理。
smime:S/MIME邮件处理。
speed:算法速度测量。
spkac:SPKAC打印和生成实用程序。
ts:时间戳权威工具(客户端/服务器)。
verify:X.509证书验证。
version:OpenSSL版本信息。
x509:X.509证书数据管理。

image

生成随机密码

[root@xyy10 ~]# openssl rand -base64 12
kbGAbrk2ny88FuFy

openssl配置文件

centos中 /etc/pki/tls/openssl.cnf ubuntu中 /etc/ssl/openssl.cnf

[ ca ]
[default_ca](https://www.zhihu.com/search?q=default_ca&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A3464906308%7D)      = CA_default            # The default ca section
####################################################################
[ CA_default ]
# 默认CA配置
dir             = /home/xxx/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 [证书吊销列表](https://www.zhihu.com/search?q=%E8%AF%81%E4%B9%A6%E5%90%8A%E9%94%80%E5%88%97%E8%A1%A8&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A3464906308%7D)目录
database        = $dir/index.txt                # database index file. 所有用户颁发证书的索引数据库,证书编号
#unique_subject = no                            # Set to 'no' to allow creation of several certs with same subject.
new_[certs_dir](https://www.zhihu.com/search?q=certs_dir&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A3464906308%7D)   = $dir/newcerts                 # default place for new certs. 新颁发证书存储目录
certificate     = $dir/rootca.pem               # The CA certificate CA的[自签名证书](https://www.zhihu.com/search?q=%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A3464906308%7D)
serial          = $dir/serial                   # The current serial number 每个证书的编号 序列号存放的将要颁发的证书的编号  需要赋予初始值
[crlnumber](https://www.zhihu.com/search?q=crlnumber&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A3464906308%7D)       = $dir/crlnumber                # the current crl number 证书吊销列表的编号
# must be commented out to leave a V1 CRL
crl             = $dir/crl.pem                  # The current CRL 证书吊销列表文件
private_key     = $dir/private/rootkey.pem      # The private key CA私钥
RANDFILE        = $dir/private/.rand            # private random number file
x509_extensions = usr_cert                      # The extensions to add to the cert
# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt        = ca_default                    # Subject Name options
cert_opt        = ca_default                    # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# Extensions to add to a CRL. Note: Netscape [communicator](https://www.zhihu.com/search?q=communicator&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A3464906308%7D) chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions        = crl_ext
default_days    = 365                   # how long to certify for
default_crl_days= 30                    # how long before next CRL
default_md      = default               # use public key default MD
preserve        = no                    # keep passed DN ordering
# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy          = policy_anything
# 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](https://www.zhihu.com/search?q=policy_anything&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A3464906308%7D) ]
countryName                 = optional
stateOrProvinceName         = optional
localityName                = optional
organizationName            = optional
organizationalUnitName      = optional
commonName                  = supplied
emailAddress                = optional
内容大纲
批注笔记
📚 openssl与CA证书
ArticleBot
z
z
z
z
主页
会议室
Git管理
文章
云文档
看板