• 本站在不影响浏览的前提下添加了少量广告,请允许本站广告可显示,感谢~
  • 如果有必要,请使用Telegram关注https://t.me/getssr_info
  • 关于国内某个软件代理商代理的CorelDRAW系列软件,如果各位需要正版请访问corel官方网站,不要访问带有china的网站!!!反正话是放在这里了,听不听随你
  • 如果遇到文章图片不显示请联系管理员处理,谢谢
  • 欢迎访问寡人的吐槽胜地,我们真的只是吐槽,不谈技术,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 版权声明:大部分文章是从网上复制的!并不表示全部都是从网上复制的!

在Linux下使用openssl创建根证书,中间证书和服务端证书

技术类 大变态 来源:江南、董少 4年前 (2020-06-22) 1649次浏览 已收录 0个评论
文章目录[隐藏]


根证书一般情况用来签发中间证书,再由中间证书签发终端证书(服务端、客户端)
SSL 证书通过在客户端浏览器和 Web 服务器之间建立一条 SSL 安全通道(Secure socket layer(SSL)安全协议是由 Netscape Communication 公司设计开发。该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。

自签发 SSL 证书的缺点:
1、自签 SSL 证书最容易被假冒和伪造,被欺诈网站利用
2、部署自签 SSL 证书的网站,浏览器会弹出警告(可以通过安装根证书和中间证书解决)
3、自签 SSL 证书最容易受到 SSL 中间人攻击
4、自签 SSL 证书没有可访问的吊销列表
……

本文的自签发证书,仅用于局域网内使用,用作他用导致的后果自负。

本次使用 OPENSSL 签发根证书、中继证书和终端证书需要在您 Linux 系统的 ROOT 账号下进行,需要读写根目录(/)

自签根证书的建立(ROOT_CA)

1、创建根证书文件夹

在根目录下建立一个/ca 文件夹,用于存放后面要建立的一系列证书(根证书、中间证书、终端证书的相关目录文件夹都存放在这个目录下)

cd /
mkdir ca

2、创建一个 root 文件夹,用于存放根证书的文件

cd ca
mkdir root

3、进入 root 目录,建立相关的目录

private 目录存放根证书的私钥
cert 目录存放根证书
signed_certs 目录存放根证书签发过的证书的副本
改变 private 目录的权限:管理员可以读、写、进入目录,其他人没有任何权限访问这个目录
cd /ca/root
mkdir private cert signed_certs
chmod 700 private

4、建立相关的记录文件

建立 index.txt,此档案会用来纪录根证书签发过的证书的纪录,每次根证书签发证书 OpenSSL 会自动更新此档案
建立 serial,被签发的证书都会有序号的栏位,纪录此证书在上一层签发单位所签发的证书的序号,此档案会用来纪录中间证书签发的证书的序号,每次中间证书签发证书 OpenSSL 会自动更新此档案
将序号 0001 写入 serial 文件,代表这是第一次签发证书
touch index.txt
touch serial
echo 0001 > serial

5、创建根证书设定档

填写 OpenSSL 需要的设定档,文件名是 openssl_root_ca.cnf,并放置在 root 目录内,内容如下:

touch openssl_root_ca.cnf

然后使用 winscp 访问这个文件,填入下面的内容

[ ca ]
default_ca = CA_default
 
[ CA_default ]
# 放置相关的档案和目录
dir = /ca/root
certs = $dir/cert
new_certs_dir = $dir/signed_certs
database = $dir/index.txt
serial = $dir/serial
RANDFILE = $dir/private/.rand
 
# 放置私钥和凭证的路径
private_key = $dir/private/root_ca.key.pem
certificate = $dir/cert/root_ca.cert.pem
 
default_md = sha256
 
name_opt = ca_default
cert_opt = ca_default
default_days = 365
preserve = no
policy = policy_defualt
 
[ policy_defualt ]
# 签发中继凭证时资料的检查(是否必须和根凭证一样).
countryName = optional
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
 
[ req ]
# req 工具需要的参数.
default_bits = 2048
distinguished_name = req_distinguished_name
string_mask = utf8only
default_md = sha256
 
[ req_distinguished_name ]
# 产生凭证时要输入的资料的说明.
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name
localityName = Locality Name
0.organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
emailAddress = Email Address
 
[ root_ca ]
# 签发根凭证使用.
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
 
[ intermediate_ca ]
# 签发中继凭证使用.
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

6、创建根证书秘钥

在 root 目录的 private 目录下建立一个 root_ca.key.pem 文件
该文件为根证书的私钥文件(本文的所有私钥文件均不加密,因此删除了加密方式-aes256参数)

openssl genrsa -out private/root_ca.key.pem 4096

7、使用根证书设定档创建根证书

在 root 目录下的 cert 目录下建立一个名为 root_ca.cert.pem 的文件,该文件即为证书
证书的有效期为 7200 天,私钥为 root_ca.key.pem 文件,配置文件为 openssl_root_ca.cnf

openssl req -config openssl_root_ca.cnf -new -x509 -days 7200 -sha256 -extensions root_ca -key private/root_ca.key.pem -out cert/root_ca.cert.pem
接着输入会让你输入以下内容:

所在的国家的缩写,2 个字母,例如 China = CH,Unit State = US
所在的州或省
所在的城市
所在的公司
所在的公司的单位
凭证的名称
联络信箱

8、检查自签的根证书的相关信息以及是否有误

openssl x509 -noout -text -in cert/root_ca.cert.pem

中间证书的建立

1、创建中间证书相关目录

进入/ca 目录,建立一个 intermediate 目录,并进入 intermediate 目录

cd /ca
mkdir intermediate
cd intermediate

2、建立中间证书的相关目录和档案

建立相关目录:
private:存放中间证书的私钥
csr:存放中间证书的证书签发申请档
cece:存放中间证书
chain:存放中间证书的证书串链
signed_certs:存放中间证书签发过的证书的副本
改变存放私钥的目录存取权限
mkdir private csr cert chain signed_certs
chmod 700 private

3、建立相关记录文档

建立 index.txt,此档案会用来纪录中间证书签发过的证书的纪录,每次中间证书签发证书 OpenSSL 会自动更新此档案
建立 serial,并在档案中填入 0001,被签发的证书都会有序号的栏位,纪录此证书在上一层签发单位所签发的证书的序号,此档案会用来纪录根证书签发的证书的序号,每次根证书签发证书 OpenSSL 会自动更新此档案
将序号 0001 写入 serial 文件,代表这是第一个签证的中间证书
touch index.txt
touch serial
echo 0001 > serial

4、填写 OpenSSL 需要的设定档

档名是 openssl_intermediate_ca.cnf,并放置在 intermediate 目录内,内容如下:

touch openssl_intermediate_ca.cnf
[ ca ]
default_ca = CA_default
 
[ CA_default ]
#放置相关的档案和目录
dir = /ca/intermediate
certs= $dir/cert
new_certs_dir = $dir/signed_certs
database = $dir/index.txt
serial = $dir/serial
RANDFILE = $dir/private/.rand
 
#放置私人和凭证的路径
private_key = $dir/private/intermediate_ca.key.pem
certificate = $dir/cert/intermediate_ca.cert.pem
 
default_md = sha256
 
name_opt = ca_default
cert_opt = ca_default
default_days = 365
preserve = no
policy = policy_defualt
 
[ policy_defualt ]
countryName = optional
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
 
[ req ]
#req 工具需要的参数
default_bits = 2048
distinguished_name = req_distinguished_name
string_mask = utf8only
default_md = sha256
 
[ req_distinguished_name ]
#产生凭证时要输入的资料的说明
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name
localityName = Locality Name
0.organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
emailAddress = Email Address
 
[ server_cert ]
#签发服务端证书使用
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
 
[ client_cert ]
#签发客户端证书使用
basicConstraints = CA:FALSE
nsCertType = client, email
nsComment = "OpenSSL Generated Client Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection

如果你想给你的服务端证书添加多个 IP 或域名,需要在[ server_cert ]最后一行添加上下面的内容:

subjectAltName=@alt_names

[alt_names]
DNS.1 = *.a.com
DNS.2 = *.b.com
IP.1 = 127.0.0.1
IP.2 = 10.0.1.1

5、创建证书私钥文件

在 private 目录下建立一个 intermediate_ca.key.pem 文件,这个文件是中间证书的私钥

openssl genrsa -out private/intermediate_ca.key.pem 4096

6、生成中间证书的申请文件

在中间证书目录产生中间证书的证书签发申请档,档名是 intermediate_ca.csr.pem

openssl req -config openssl_intermediate_ca.cnf -new -sha256 -key private/intermediate_ca.key.pem -out csr/intermediate_ca.csr.pem
然后让你依次输入以下内容:

所在的国家的缩写,2 个字母,例如 China = CH,Unit State = US
所在的州或省
所在的城市
所在的公司
所在的公司的单位
凭证的名称
联络信箱

7、使用根证书签发中间证书

使用根证书去签发中间证书的证书签发申请档,产生中间证书,证书名为 intermediate_ca.cert.pem
首先进入根证书目录

cd ../root

然后签发证书(中间证书的有效期为 3600 天)

openssl ca -config openssl_root_ca.cnf -extensions intermediate_ca -days 3600 -notext -md sha256 -in ../intermediate/csr/intermediate_ca.csr.pem -out ../intermediate/cert/intermediate_ca.cert.pem 

接着询问你是否签发证书(选择 y)
以及询问是否纪录签发的证书到根证书目录的资料库中(index.txt,serial),输入 y,注意这里更新的是根证书下的相关记录文件

8、验证中间证书

openssl x509 -noout -text -in ../intermediate/cert/intermediate_ca.cert.pem


确定一下中间证书是由根证书签发的(显示“OK”代表是正确的)

openssl verify -CAfile cert/root_ca.cert.pem ../intermediate/cert/intermediate_ca.cert.pem

9、完善证书链

产生中间证书的整数串链,档名是 chain_ca.cert.pem

验证机制:

浏览器在验证网站传来的证书是否可信任时,需要验证从“根证书 – >中间证书-1 – > … – >中间证书-N – >终端证书”整个串链,所以网站在传送证书时是传送整个串链的证书给浏览器
因此证书中心除了签发证书给对方之外,还必须将上层证书中心给的证书串链加上自己的证书产生新的证书串链,再将新的证书串链给对方
证书串链的格式是:

—– BEGIN CERTIFICATE —– 
证书 1 内容……
—– END CERTIFICATE —– 
—–BEGIN CERTIFICATE—– 
证书 2 内容……
—–END CERTIFICATE—– 
… 
—–BEGIN CERTIFICATE—– 
证书 N 内容……
—– END CERTIFICATE —– 

证书串链内证书的顺序是自己的证书在最前面,所以就是:

—–BEGIN CERTIFICATE—–
中间证书 -N
—–END CERTIFICATE—–

—–BEGIN CERTIFICATE—–
中间证书 -1
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
根证书
—–END CERTIFICATE—– 


应用程式必须自己拥有对方的证书的根证书,表示信任此根证书所签发的证书,才有办法验证对方传来的证书串链,所以实际使用时证书串链​​可以不包含根证书部分
回到中继凭证目录处理

cd ../intermediate

产生证书串链(包含根证书)

cat cert/intermediate_ca.cert.pem ../root/cert/root_ca.cert.pem > chain/chain.cert.pem

服务端证书的建立

1、建立一个服务端目录,用于存放服务端证书的相关文件

在/ca 目录下建立一个目录,存放所有关于服务端证书的资料,名称是/ca/​​server

cd /ca
mkdir server
cd server

2、创建服务端设定档

填写 OpenSSL 需要的设定档,档名是 openssl_csr.cnf

touch openssl_csr.cnf

放置在服务端的目录内,通过 winscp 输入内容如下:

[ req ]
#req 工具需要的参数
default_bits       = 2048
distinguished_name = req_distinguished_name
string_mask        = utf8only
default_md         = sha256
 
[ req_distinguished_name ]
#产生凭证时要输入的资料的说明
countryName            = Country Name (2 letter code)
stateOrProvinceName    = State or Province Name
localityName           = Locality Name
0.organizationName     = Organization Name
organizationalUnitName = Organizational Unit Name
commonName             = Common Name
emailAddress           = Email Address

如果你想给你的服务端证书添加多个 IP 或域名,需要在[ server_cert ]最后一行添加上下面的内容:

[alt_names]
DNS.1 = *.a.com
DNS.2 = *.b.com
IP.1 = 127.0.0.1
IP.2 = 10.0.1.1

3、创建服务端私钥

在服务端目录下产生服务端证书的私钥,私钥名是 server.key.pem

openssl genrsa -out server.key.pem 4096

4、证书签发申请档

在目录产生服务端证书的证书签发申请档,档名是 server.csr.pem

openssl req -config openssl_csr.cnf -new -sha256 -key server.key.pem -out server.csr.pem 
接着让你输入以下内容
所在的国家的缩写,2 个字母,例如 China = CH,Unit State = US
所在的州或省
所在的城市
所在的公司
所在的公司的单位
凭证的名称
联络信箱

5、使用申请档生成服务端证书

使用中间证书去签发服务端证书的证书签发申请档,产生服务端的证书,证书名为 server.cert.pem
先进入中间证书的目录下

cd ../intermediate

然后使用中间证书签发服务端证书(证书的有效期为 1800 天)

openssl ca -config openssl_intermediate_ca.cnf -extensions server_cert -days 1800 -notext -md sha256 -in ../server/server.csr.pem -out ../server/server.cert.pem 

并询问你是否签发服务端证书
询问你是否更新中间证书目录下的相关资料库文件(index.txt,serial),注意:由于是中间证书签发的,所以更新的是中间证书目录下的记录文件

检查签发的服务端证书是否无误

openssl x509 -noout -text -in ../server/server.cert.pem

6、确认服务端证书的完整性

需要做完整的串链检查,需要使用含有根证书的证书串链(显示“OK”代表没问题)

openssl verify -CAfile chain/chain.cert.pem ../server/server.cert.pem

7、产生服务端证书的证书串链

回到服务端证书目录

cd ../server

产生证书串链

cat server.cert.pem ../intermediate/chain/chain.cert.pem > server_chain.cert.pem 

到这里,服务端证书已经签发完毕。
server.key.pem作为服务端密匙
server_chain.cert.pem作为服务端证书
导入网站 ssl 即可。

客户端(PC)导入自签发证书

请注意,如果客户端(PC)没有导入自签发的根证书和中间证书,就算你给网站添加了 ssl,还是会提示证书风险问题。因此,需要你给你的电脑导入根证书和中间证书。
根证书路径:/ca/root/cert/root_ca.cert.pem
中间证书路径:/ca/intermediate/chain/chain.cert.pem

需要将这两个文件下载到本地计算机,修改后缀为crt双击安装。根证书安装在受信任的根证书颁发机构
中间证书安装在中间证书颁发机构


本站大部分资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费内容,请在下载后 24 小时之内自觉删除,若作商业用途请购买正版;如果有版权争议,请发送邮件至 master@digac.cc(请留下写明原因和文章链接),我们将及时处理,谢谢!

喜欢 (45)
大变态
关于作者:
头像
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址