如何手动创建可信任证书DB并配置 nss-config-dir

2023-10-17 01:59

本文主要是介绍如何手动创建可信任证书DB并配置 nss-config-dir,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以阿里云免费邮箱为例

1. 如何下载证书链

证书链说明
cert-chain

使用 gnutls

gnutls-cli --print-cert smtp.aliyun.com:465 < /dev/null > aliyun-chain.certs

使用 openssl showcerts

$ echo -n | openssl s_client -showcerts -connect smtp.aliyun.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./tmp/aliyun-chain.pem
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G2
verify return:1
depth=0 C = CN, ST = ZheJiang, L = HangZhou, O = "Alibaba (China) Technology Co., Ltd.", CN = mail.aliyun.com
verify return:1
DONE

生成所列出的证书链放入 ./tmp/aliyun-chain.pem

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

查看证书

$ openssl crl2pkcs7 -nocrl -certfile ./tmp/aliyun-chain.pem | openssl pkcs7 -print_certs -noout
subject=C = CN, ST = ZheJiang, L = HangZhou, O = "Alibaba (China) Technology Co., Ltd.", CN = mail.aliyun.com
issuer=C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G2subject=C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G2
issuer=C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CAsubject=C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
issuer=C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA

2. 把证书分开为单独的证书文件

手动拷贝或者用脚本

以./tmp/aliyun-chain.pem 为例,使用 awk

awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/{if(/-----BEGIN CERTIFICATE-----/){a++}; out="./tmp/aliyun-cert"a".pem"; print > out}' ./tmp/aliyun-chain.pem

将 ./tmp-aliyun-chain.pem 里的三个证书,生成三个文件 aliyun-cert1.pem aliyun-cert2.pem aliyun-cert3.pem

查看证书

$ openssl crl2pkcs7 -nocrl -certfile ./tmp/aliyun-cert1.pem | openssl pkcs7 -print_certs -noout
subject=C = CN, ST = ZheJiang, L = HangZhou, O = "Alibaba (China) Technology Co., Ltd.", CN = mail.aliyun.com
issuer=C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G2$ openssl crl2pkcs7 -nocrl -certfile ./tmp/aliyun-cert2.pem | openssl pkcs7 -print_certs -noout
subject=C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G2
issuer=C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA$ openssl crl2pkcs7 -nocrl -certfile ./tmp/aliyun-cert3.pem | openssl pkcs7 -print_certs -noout
subject=C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
issuer=C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA

3. 获取证书名

$ echo -n | openssl s_client -showcerts -connect smtp.aliyun.com:465 | grep i: | sed -e 's,.*=,,' > ./tmp/aliyuncert-issuer-names
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G2
verify return:1
depth=0 C = CN, ST = ZheJiang, L = HangZhou, O = "Alibaba (China) Technology Co., Ltd.", CN = mail.aliyun.com
verify return:1
DONE

上面从通过获取签发者名字得到三个证书的名字

$ cat ./tmp/aliyuncert-issuer-names GlobalSign Organization Validation CA - SHA256 - G2GlobalSign Root CAGlobalSign Root CA

与 subject 中的名字不同

$ echo -n | openssl s_client -showcerts -connect smtp.aliyun.com:465 | grep s: | sed -e 's,.*=,,' > ./tmp/aliyuncert-subject-names
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G2
verify return:1
depth=0 C = CN, ST = ZheJiang, L = HangZhou, O = "Alibaba (China) Technology Co., Ltd.", CN = mail.aliyun.com
verify return:1
DONE$ cat ./tmp/aliyuncert-subject-names mail.aliyun.comGlobalSign Organization Validation CA - SHA256 - G2GlobalSign Root CA

上面使用 subject 的名字作为证书的名字,由于阿里云的证书链的两级签发者相同,因此可以使用subject作为证书的名字导入数据库

certutil -A -n "GlobalSign Root CA" - G2 -t "C,," -d ./certs/ -i ./tmp/aliyun-cert3.pem
certutil -A -n "GlobalSign Organization Validation CA - SHA256 - G2" -t "C,," -d ./certs/ -i ./tmp/aliyun-cert2.pem
certutil -A -n "mail.aliyun.com" -t "Pu,Pu,Pu" -d ./certs/ -i ./tmp/aliyun-cert1.pem

查看:

certutil -L -d ./certs
account aliyunmandb {set nss-config-dir=/home/user/tmp/tmp3/aliyuncerts/acerts/certsset ssl-verify=ignoreset from=myname<mymail@aliyun.com>set smtp=smtps://smtp.aliyun.com:465set smtp-auth=loginset smtp-auth-user=mymail@aliyun.comset smtp-auth-password=xxxxxxxx
}

https://blog.csdn.net/RayMonD_D/article/details/104152933

https://www.cnblogs.com/itbox/p/13207227.html

https://blog.csdn.net/ayychiguoguo/article/details/120849766

https://www.cnblogs.com/yeyu1314/p/10167944.html

https://blog.csdn.net/ppdouble/article/details/58598124

https://serverfault.com/questions/590870/how-to-view-all-ssl-certificates-in-a-bundle

https://stackoverflow.com/questions/11046135/how-to-send-email-using-simple-smtp-commands-via-gmail?rq=3

https://www.systutorials.com/sending-email-from-mailx-command-in-linux-using-gmails-smtp/

https://kb.novaordis.com/index.php/Configure_mailx_to_Relay_via_a_Google_SMTP_Server

https://www.mankier.com/1/certutil

https://shagihan.medium.com/what-is-certificate-chain-and-how-to-verify-them-be429a030887

https://www.ibm.com/docs/en/cloud-paks/cp-security/saas?topic=ccq-determining-whether-your-certificate-is-internally-signed-custom-signed

https://www.yii666.com/article/217727.html?action=onAll

https://blog.csdn.net/ichen820/article/details/123187376

https://blog.51cto.com/u_10019069/2141364

这篇关于如何手动创建可信任证书DB并配置 nss-config-dir的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/222168

相关文章

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用