自建SSL证书(兼容ios)

于SSL/TLS服务器证书,特别是那些用于HTTPS网站的证书,有几个关键的扩展和属性是必要的,以确保证书可以被客户端(如浏览器)正确识别和信任。这些细节对于确保加密连接的安全性至关重要。以下是一些关键的证书详情和扩展:

  1. 主题备用名称 (Subject Alternative Name, SAN)

    SAN字段允许证书指定多个资源名称(比如,多个域名或IP地址)。对于现代的浏览器和客户端,此字段几乎是必需的,因为它们会检查访问的域名是否包含在证书的SAN中。

  2. 密钥用途 (Key Usage, KU)

    这个扩展定义了证书的密钥可以执行的安全操作。对于服务器证书,通常需要包括"数字签名"(digitalSignature)(证明信息是由私钥持有者签名的)和"密钥加密"(keyEncipherment)(允许使用公钥加密数据,以便只有对应的私钥持有者可以解密)。

  3. 扩展密钥用途 (Extended Key Usage, EKU)

    EKU进一步细化了证书的使用场景。对于HTTPS服务器证书,这通常包括"服务器身份验证"(serverAuth)标识符,表明该证书可以用于验证服务器的身份。

  4. 基本约束 (Basic Constraints)

    对于根证书或任何中间CA证书,基本约束必须设置为CA(证书颁发机构)=TRUE,并且可选地包含一个路径长度约束,这指定了从该CA到最终叶子证书之间的中间CA数量上限。对于一个终端实体(比如服务器或客户端)的证书,CA通常应设置为FALSE。

  5. CRL分布点 (CRL Distribution Points)

    这个扩展包含了获取证书吊销列表(CRL)的URL,客户端可以使用这些URL来检查证书是否已被吊销。

  6. 证书策略 (Certificate Policies)

    证书策略定义了颁发证书的策略或用途。虽然这不是技术上强制的,但它提供了关于证书可能被接受用途的信息。

    确保这些扩展和属性正确设置是创建SSL/TLS证书的重要部分,特别是当你打算让证书被公众信任的客户端(如互联网浏览器)接受时。如果你是自己生成这些证书(比如用OpenSSL),需要确保在证书签名请求(CSR)和/或在证书生成过程中正确指定这些属性。

1、生成根证书

生成rsa私钥

openssl genpkey -algorithm RSA -out rootCA.key -pkeyopt rsa_keygen_bits:2048

创建根证书的配置文件

为了确保包含所有必要的扩展,最好创建一个配置文件(比如命名为rootCA.conf)来定义证书的参数和扩展:

复制代码
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C = CN
ST = GuangDong
L = ShenZhen
O = lll
OU = lll Unit
CN = lll Root CA

[ext]
basicConstraints = critical,CA:TRUE
keyUsage = critical,keyCertSign,cRLSign
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer

这个配置文件定义了证书的DN(Distinguished Name)和一些关键的扩展,如basicConstraints、keyUsage等。

生成自签名根证书(10年有效期):

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem -config rootCA.conf -extensions ext

2. 生成服务器的证书

生成服务器私钥

openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048

创建证书签名请求(CSR)

创建一个名为server.csr.conf的配置文件,以包含CSR的详细信息

复制代码
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext

[dn]
C = CN
ST = GuangDong
L = ShenZhen
O = lll
OU = lll Unit
CN = *.lll.com

[req_ext]
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.lll.com

生成CSR

openssl req -new -key server.key -out server.csr -config server.csr.conf

使用根证书签发服务器证书

创建一个新的配置文件(比如v3.ext)来定义签发的证书应该包含的扩展

复制代码
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.leve.com

签发证书(IOS经测试最大支持825天有效期):

openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 825 -sha256 -extfile v3.ext

证书过期可使用此命令重新生成

相关推荐
邪恶的贝利亚7 小时前
实现p2p的webrtc-srs版本
网络协议·webrtc·p2p
Lightning-py8 小时前
Linux命令cat /proc/net/snmp查看网络协议层面统计信息
网络·网络协议·tcp/ip
2501_915106328 小时前
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
websocket·网络协议·tcp/ip·http·网络安全·https·udp
还是鼠鼠12 小时前
HTTP 请求协议简单介绍
java·开发语言·网络·网络协议·http
二流小码农12 小时前
鸿蒙开发:DevEcoTesting中的稳定性测试
android·ios·harmonyos
一杯凉白开14 小时前
硬件工程师口中的取低八位,中八位,高八位是什么意思?
android·网络协议
库奇噜啦呼14 小时前
push [特殊字符] present
macos·ios·cocoa
胖虎114 小时前
iOS 16 SwiftUI 优雅跳转实践:用枚举路由和 NavigationStack 实现多页面导航
ios·swiftui·swift·swiftui跳转·navigationstack
软***c15 小时前
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
ios·iphone·iphone 解锁
Digitally15 小时前
如何将联系人从 iPhone 转移到 Android
android·ios·iphone