OpenSSL 系列2 --- 应用

一、概要

1. 承上启下

OpenSSL 系列1 --- 安装

2. 环境

(1) CentOS 7.9 2009

(2) OpenSSL 3.0.7

二、CA (Certificate Authority)

它可以生成私钥和CSR,签发、吊销数字证书等。

1. 搭建

(1) 创建工作目录

cd /etc/pki/CA
sudo mkdir -p certs newcerts private public crl
sudo chmod -R 755 /etc/pki/CA

(2) 创建index.txt

sudo touch index.txt

(3) 创建serial

su
echo 01 > serial

(4) 生成CA私钥

CA私钥用于签发CA证书。

sudo openssl genrsa -out /etc/pki/CA/cakey.pem 4096

(5) 生成CA证书

CA证书可用于签发应用(比如网站、LDAP)的证书,有效期365天。

sudo openssl req -new -x509 -days 365 -key /etc/pki/CA/cakey.pem -out /etc/pki/CA/cacert.pem

运行之后目录内容如下:

a. cakey.pem为CA的密钥;

b. cacert.pem为CA证书;

c. certs目录用于存放CA签发的证书;

d. newcerts目录用于存放CA更新签发的证书;

e. private目录用于存放私钥。

2. 密钥对

不同于数字证书,密钥并没有强制过期的限制

(1) 生成

sudo openssl genrsa -out key.pem 4096

这里,key.pem文件其实同时包含私钥和公钥。

(2) 导出公钥

sudo openssl rsa -in key.pem -pubout -out public.key

3. 同时生成密钥和自签名证书

sudo openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem

默认情况下,证书有效期为30天。如果想指定有效期则:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key.pem -out cert.pem

三、证书

1. CSR (Certificate Signing request)

(1) 概念

CSR即证书签名申请(Certificate Signing Request),获取 SSL 证书,需要先生成 CSR 文件并提交给证书颁发机构(CA)。

CSR包含用于签发证书的公钥,用户辨识的名称信息,用于保护信息真实性和完整性的数字签名等。

(2) 在创建CSR过程中,需要提供以下信息:

a. 国家或地区代码,以国际标准化组织(ISO)的两字母格式表示,中国为CN;

b. 洲、省、自治区或市,比如Beijing;

c. 城市或地区,比如Haidian;

d. 组织机构,比如公司名称或者机构名称;

e. 申请部门,比如IT Support;

f. 通用名称(Common Name),需要填写申请该CSR的完全限定名(FQDN),比如mail.example.com, www.example.com等。

作为一种实践,我推荐针对每一个域名设置一个独立的CSR,并定期更新。

(3) 生成CSR

openssl req -new -key private/key.pem -out private/[domain].csr

2. 使用CSR生成证书

openssl ca -keyfile private/cakey.pem -cert cacert.pem -in private/[domain].csr -out certs/[domain].crt.pem -keyform PEM -days 365

-keyfile: 为CA的密钥,缺省则读取配置文件中的值;

-cert: 为CA的证书,缺省则读取配置文件中的值;

-keyform: 证书格式,默认为PEM。

3. 校验证书

openssl verify -CAfile cacert.pem certs/[domain].crt.pem

这里如果没问题,则会输出:

certs/[domain].crt.pem: OK

4. 撤销证书

当证书生成之后,会在CA目录下的index.txt中保存相应的档案,并在newcerts目录下保存新生成的证书的副本。

如果希望撤销证书,首先需要读取index.txt获取相关证书的index number。

(1) 读取index.txt

cat /etc/pki/CA/index.txt

图中,01和02就是证书的index number

(2) 撤销证书

openssl ca -revoke /etc/pki/CA/newcerts/<index number>.pem

5. dhparam

openssl dhparam -out dhparam.pem 2048

6. 证书转换

pem格式的证书是一种文本格式,其包含了加密证书和私钥等信息。而crt格式的证书则是一种二进制格式,其包含了用户公共密钥、证书有效期、用途等信息。

(1) pem转crt

sudo openssl x509 -outform der -in cert.pem -out cert.crt

(2) pem转私钥

sudo openssl rsa -in cert.pem -out private.key

注意:这里的"cert.pem"是生成CSR时-key参数,这是一个pem类型的密钥。

(3) 校验

sudo openssl rsa -noout -modulus -in private.key | openssl md5
sudo openssl x509 -noout -modulus -in cert.crt | openssl md5

比较两个命令输出的MD5值是否一致,如果一致则为有效证书和私钥,否则无效。

7. Keystore

(1) 创建pkcs12格式的keystore

sudo openssl pkcs12 -export -in [证书] -inkey [私钥] -name [名称] -out server.p12

例:

sudo openssl pkcs12 -export -in fullchain.pem -inkey private.pem -name 'tomcat' -out server.p12

需要输入导出密码,请记住该密码。

命令成功后会在当前目录下生成server.p12文件。

(2) PKCS12 转 JKS

keytool -importkeystore -srcstoretype PKCS12 -srcstorepass <PKCS12证书密码> -srckeystore <PKCS12证书> -deststoretype JKS -deststorepass <Keystore密码> -destkeypass <Keystore密码> -destkeystore keystore.jks -alias <域名>

成功执行后会在当前目录下生成keystore.jks。
同时,执行成功后会有如下提示,建议转成工业标准格式PKCS12:

(3) 将JKS格式转成PKCS12格式:

sudo keytool -importkeystore -srckeystore keystore.jks -deststoretype pkcs12 -destkeystore keystore.p12

成功后会将原JKS格式的keystore备份成keystore.old,然后替换keystore为PKCS12格式的内容:

四、参考

1. 官方

(1) openssl req

https://www.openssl.org/docs/man1.0.2/man1/openssl-req.html

(2) openssl genrsa

https://www.openssl.org/docs/man1.0.2/man1/genrsa.html

(3) openssl ca

https://www.openssl.org/docs/man1.1.1/man1/openssl-ca.html

(4) openssl verify

https://www.openssl.org/docs/man1.1.1/man1/openssl-verify.html

(5) openssl dhparam

https://www.openssl.org/docs/man1.1.1/man1/openssl-dhparam.html

(6) openssl PKCS12

https://www.openssl.org/docs/man1.1.1/man1/openssl-pkcs12.html

2. 其他

https://blog.51cto.com/u_11555417/5927850

https://www.python100.com/html/120611.html

https://www.golinuxcloud.com/configure-openldap-with-tls-certificates/

https://www.digicert.com/kb/ssl-support/openssl-quick-reference-guide.htm

https://www.sslshopper.com/article-most-common-openssl-commands.html

https://www.ibm.com/docs/en/zvse/6.2?topic=SSB27H_6.2.0/fa2ti_openssl_generate_dh_parms.htm

(2) Keystore

https://documentation.solarwinds.com/en/success_center/whd/content/helpdeskcreatepkcs12ikeystorefromprivatekeycert.htm

posted @ 2022-12-11 23:06  白马黑衣  阅读(438)  评论(0编辑  收藏  举报