自建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)和/或在证书生成过程中正确指定这些属性。

生成根证书

生成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 = Wfh
OU = Wfh Unit
CN = Wfh Root CA

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

请替换[dn部分],这个部分请认真填写,其中
C: 国家
N: 省份
L: 城市
O: 组织
OU: 组织单位
CN :可以理解为根证书的名字,用于区分根证书
这个配置文件定义了证书的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

生成服务器的证书

生成服务器私钥

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 = Wfh
OU = Wfh Unit
CN = *.xxx.com

[req_ext]
subjectAltName = @alt_names

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

其中subjectAltName(SAN)可以指定多个域名(eg:DNS.2,DNS.3),这里我使用通配符 *,表示子域名都可以使用这个服务器证书
生成服务端证书签名请求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 = *.xxx.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

配置Nginx

将生成的私钥(server.key)和证书(server.crt)用于你的Nginx配置。编辑你的Nginx配置文件(通常位于/etc/nginx/目录下),添加或修改以下行来指定证书和私钥的位置:

server {
    listen 443 ssl;
    server_name app.xxx.com;

    ssl_certificate /path/to/your/server.crt;
    ssl_certificate_key /path/to/your/server.key;

    # 其他配置...
}

重新加载Nginx配置

sudo nginx -s reload

客户端需要导入rootCA.pem证书

查看另一篇文章:SSL浏览器导入自建证书

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 .NET WebAPI 中自建 SSL 证书可以通过以下步骤完成: 1. 安装 OpenSSL 工具: - 下载 OpenSSL 工具并安装; - 确认 OpenSSL 安装位置,例如:C:\OpenSSL。 2. 生成自签名证书: - 打开命令提示符,进入 OpenSSL 安装目录; - 执行以下命令生成自签名证书: ``` openssl req -newkey rsa:2048 -nodes -keyout mykey.key -x509 -days 365 -out mycert.crt ``` - 执行命令后,会要求填写一些证书相关信息,按照提示填写即可; - 生成的证书将保存在 OpenSSL 目录中。 3. 将证书导入到 Windows 证书存储中: - 双击生成的 mycert.crt 文件,选择“安装证书”; - 在“证书导入向导”中,选择“计算机帐户”; - 将证书保存到“受信任的根证书颁发机构”中; - 完成证书导入。 4. 在 Web.config 文件中配置 SSL: - 打开 Web.config 文件,在 `<system.webServer>` 标签下添加如下代码: ```xml <bindings> <binding protocol="https" bindingInformation="*:44300:localhost" /> </bindings> <sslFlags>Ssl, SslNegotiateCert</sslFlags> <certificateHash>YOUR_CERTIFICATE_THUMBPRINT</certificateHash> <certificateStoreName>My</certificateStoreName> ``` - 其中,`certificateHash` 参数需要填写证书的指纹(Thumbprint),可以在证书管理器中查找; - `certificateStoreName` 参数需要填写证书存储的名称,这里使用“我的”(My)。 5. 重新启动 WebAPI 以使配置生效。 完成以上步骤后,WebAPI 就可以使用自签名 SSL 证书进行加密传输了。注意,自签名证书不被浏览器默认信任,因此在生产环境中建议使用从证书颁发机构购买的证书
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值