探索 TLS 证书及其限制

笔记源自:https://0x00.cl/blog/2024/exploring-tls-certs/

一、关于 TLS 证书
1、证书的格式由标准 X.509(公钥证书)定义
2、RFC 5280 定义了它们的结构和在 Internet 上对 TLS 的使用
3、根证书 颁发 中间证书,中间证书向我的网站颁发了证书“0x00.cl”这是一个信任链。
如果您的浏览器或客户端可以信任根证书,那么它也应该信任它颁发的证书。Chrome 和 Firefox 等浏览器使用通用 CA 数据库 (ccadb) 在其浏览器中包含证书颁发机构 (CA)。
4、您可以创建自己的根证书并成为自己的 CA,但由于证书不会包含在任何软件中,因此大多数(如果不是全部)软件都会引发错误或至少发出有关证书不受信任的警告
https://badssl.com/ 测试地址

二、创建证书
1、通常使用openssl
首先,您必须创建一个密钥:
$ openssl genrsa -out myCA.key 2048 //生成一个 RSA 私有密钥
等价于:
$ openssl genpkey -algorithm RSA -out myCA.key -pkeyopt bits:2048
获得密钥后,可以使用以下子命令创建证书:
$ openssl req -x509 -new -key myCA.key -sha256 -days 3650 -out myCA.pem //这将创建一个有效期为 10年的证书
2、秘钥大小:建议不要超过 16384 bit
3、证书字段
3.1 不仅提供有关证书的信息,还提供有关证书的颁发者和使用者的信息。RFC 5280 section 4.1.2.4 定义了必须存在的 issuer 字段的属性:
Country 国家
Organization name 组织名称
Organizational unit name 部门名称
Distinguished name qualifier 可分辨名称限定符
State or province name 州或省名称
Common name (e.g., “Susan Housley”) 通用名称(例如,“Susan Housley”)
Serial number 序号

	Attribute					Upper bound
	Country name alpha			2
	Organization name			64
	Organizational unit name	64
	State or province name		128
	Common name					64
	Locality name				128
	属性						上界
	国家/地区名称 alpha			2
	组织名称					64
	部门名称					64
	州或省名称					128
	常用名						64
	地区名称					128

可以使用 -subj 传递这些参数
4、有效期
4.1 时间范围是 1950 年到 9999 年
4.2 能设置 start time 早于当前的证书吗?
openssl req or openssl x509 不允许
openssl ca可以。但是必须要有 CA certificate with a Certificate Signing Request (CSR)
4.2.1 创建CSR:
$ openssl x509 -in myCA.pem -signkey myCA.key -x509toreq -out myCA.csr
4.2.2 创建自定义证书:
$ openssl ca -startdate '19500101000000Z' -enddate '99991231235959Z' -in myCA.csr -keyfile myCA.key -cert myCA.pem -out myCA.crt
(windows验证失败,缺少文件)
5、检查证书信息:
$ openssl x509 -noout -text -in myCA.pem
6、使用客户端
$ curl -kv https://localhost:8443
curl最大证书链大小为 100kB

posted @ 2024-11-28 15:10  Brickert  Views(17)  Comments(0Edit  收藏  举报