自建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

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

相关推荐
叽哥3 小时前
Flutter Riverpod上手指南
android·flutter·ios
用户091 天前
SwiftUI Charts 函数绘图完全指南
ios·swiftui·swift
YungFan1 天前
iOS26适配指南之UIColor
ios·swift
权咚2 天前
阿权的开发经验小集
git·ios·xcode
用户092 天前
TipKit与CloudKit同步完全指南
ios·swift
法的空间2 天前
Flutter JsonToDart 支持 JsonSchema
android·flutter·ios
2501_915918412 天前
iOS 上架全流程指南 iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传 ipa 与审核实战经验分享
android·ios·小程序·uni-app·cocoa·iphone·webview
00后程序员张2 天前
iOS App 混淆与加固对比 源码混淆与ipa文件混淆的区别、iOS代码保护与应用安全场景最佳实践
android·安全·ios·小程序·uni-app·iphone·webview
FPGA_Linuxer2 天前
FPGA 40 DAC线缆和光模块带光纤实现40G UDP差异
网络协议·fpga开发·udp
real 12 天前
传输层协议UDP
网络·网络协议·udp