前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Strongwan 建立证书体系,CA根证书、服务端与各个客户端证书

Strongwan 建立证书体系,CA根证书、服务端与各个客户端证书

作者头像
鳄鱼儿
发布2024-09-25 08:18:51
960
发布2024-09-25 08:18:51
举报
文章被收录于专栏:鳄鱼儿的技术分享

配置IPSec需要建立 PKI,PKI(公钥基础结构)包括服务器与各个客户端的私钥和证书(公钥)、对服务器和各个客户端证书签名的 CA 证书与密钥(CA 证书与密钥来自根证书颁发机构)。

支持基于证书的双向身份验证.这意味着客户端必须对服务器证书进行身份验证,并且服务器必须在建立相互信任之前对客户端证书进行身份验证。

PKI 生成流程

1. 生成主证书颁发机构 (CA)证书和密钥
代码语言:javascript
复制
pki --gen --type sm2 --outform pem > ca.key.pem
pki --self --in ca.key.pem --type sm2 --digest sm3 --dn "C=cn, O=demo, CN=VPN CA" \
                --ca --lifetime 3650 --outform pem > ca.cert.pem

在CA主机上完成:

  • 生成CA的SM2私钥 (ca.key.pem)
  • 使用该私钥创建自签名的CA证书 (ca.cert.pem)
  • CA证书有效期为10年 (3650天)

生成后, CA需要将ca.cert.pem分发给服务器和客户端。

2. 生成服务器的证书和密钥
代码语言:javascript
复制
pki --gen --type sm2 --outform pem > server.key.pem
pki --pub --type sm2 --in server.key.pem --outform pem > server.pub.key.pem
pki --req --in server.key.pem --type sm2 --dn "C=cn, O=demo, CN=VPN Server" \
                --digest sm3 --outform pem > server.req.pem

在服务器上完成:

  • 生成服务器的SM2私钥 (server.key.pem)
  • 从私钥提取公钥 (server.pub.key.pem)
  • 创建证书签名请求 (server.req.pem)

服务器将server.req.pem发送给CA进行签名。

代码语言:javascript
复制
pki --issue --in server.req.pem --type pkcs10 --digest sm3 --lifetime 1200 \
                --cacert ca.cert.pem --cakey ca.key.pem --flag serverAuth \
                --flag ikeIntermediate --san="172.16.0.75" \
                --outform pem > server.cert.pem

在CA主机上完成:

  • CA使用自己的私钥和证书签发服务器的证书
  • 证书有效期为1200天
  • 包含serverAuth和ikeIntermediate标志
  • 添加服务器IP地址作为主题备用名称 (SAN)

CA将生成的server.cert.pem发送回服务器。

3. 生成客户端的证书和密钥
代码语言:javascript
复制
pki --gen --type sm2 --outform pem > client.key.pem
pki --pub --type sm2 --in client.key.pem --outform pem > client.pub.key.pem
pki --req --in client.key.pem --type sm2 --dn "C=cn, O=demo, CN=VPN Client" \
                --digest sm3 --outform pem > client.req.pem

在客户端设备上完成:

  • 生成客户端的SM2私钥 (client.key.pem)
  • 从私钥提取公钥 (client.pub.key.pem)
  • 创建证书签名请求 (client.req.pem)

客户端将client.req.pem发送给CA进行签名。

代码语言:javascript
复制
pki --issue --in client.req.pem --type pkcs10 --digest sm3 --lifetime 1200 \
                --cacert ca.cert.pem --cakey ca.key.pem  --san="172.16.0.91" \
                --outform pem > client.cert.pem

在CA主机上完成:

  • CA使用自己的私钥和证书签发客户端的证书
  • 证书有效期为1200天
  • 添加客户端IP地址作为主题备用名称 (SAN)

CA将生成的client.cert.pem发送回客户端。

根 CA 证书的作用

  1. 证书验证链: 在TLS/SSL连接建立过程中,服务器会向客户端提供其证书。客户端需要验证这个证书的有效性。验证过程包括检查证书是否由受信任的CA签发。因此,客户端需要有CA的证书来进行这个验证。
  2. 信任锚: CA证书作为信任锚(Trust Anchor),是整个证书信任链的起点。没有CA证书,客户端就无法验证服务器证书的真实性。
  3. 服务器端验证: 如果VPN配置要求双向认证(即服务器也要验证客户端的身份),那么服务器同样需要CA证书来验证客户端证书的有效性。
  4. 自签名CA: 在这个场景中,我们使用的是自签名的CA证书,而不是商业CA的证书。商业CA的根证书通常预装在操作系统或浏览器中,但自签名CA证书需要手动分发和安装。

分发过程:

  • 对于服务器:CA证书(ca.cert.pem)需要安装在服务器上,通常与服务器自己的证书(server.cert.pem)和私钥(server.key.pem)一起配置。
  • 对于客户端:CA证书需要安装在客户端的信任存储中。这样客户端才能信任由这个CA签发的服务器证书。

安全注意事项:

  • 只分发CA的公共证书(ca.cert.pem),绝不能分发CA的私钥(ca.key.pem)。
  • 通过安全的渠道分发CA证书,以防止中间人攻击。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PKI 生成流程
    • 1. 生成主证书颁发机构 (CA)证书和密钥
      • 2. 生成服务器的证书和密钥
        • 3. 生成客户端的证书和密钥
        • 根 CA 证书的作用
        相关产品与服务
        VPN 连接
        VPN 连接(VPN Connections)是一种基于网络隧道技术,实现本地数据中心与腾讯云上资源连通的传输服务,它能帮您在 Internet 上快速构建一条安全、可靠的加密通道。VPN 连接具有配置简单,云端配置实时生效、可靠性高等特点,其网关可用性达到 99.95%,保证稳定、持续的业务连接,帮您轻松实现异地容灾、混合云部署等复杂业务场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档