首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Strongwan 建立证书体系,CA根证书、服务端与各个客户端证书

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

作者头像
鳄鱼儿
发布于 2024-09-25 00:18:51
发布于 2024-09-25 00:18:51
42400
代码可运行
举报
运行总次数:0
代码可运行

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

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

PKI 生成流程

1. 生成主证书颁发机构 (CA)证书和密钥
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一篇文章让你读懂PyQt5布局管理,绝对干货
PyQt5的界面布局主要有两种方法:绝对定位和局部类。在PyQt5中有四种布局方式:水平布局、垂直布局、网格布局、表单布局。还有两种布局方法:addLayout和addWidget,其中addLayout用于在布局中插入子布局,addWidget用于在布局中插入控件。
星星在线
2019/05/28
21.4K0
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
PyQt5 是 Python 的图形用户界面 (GUI) 框架,它基于强大的 Qt 库。Qt 是一个跨平台的 C++ 框架,用于构建桌面应用程序。通过 PyQt5,我们可以用 Python 轻松构建跨平台的桌面应用程序,支持 Windows、macOS 和 Linux。
半截诗
2024/10/09
43.8K0
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
Python GUI开发- PyQt5 开发小工具环境入门
常见的python开发gui的库有 Tkinter, PyQt5, wxPython等。本教程是选择PyQt5 开发桌面小工具。
上海-悠悠
2024/04/25
4880
Python GUI开发- PyQt5 开发小工具环境入门
PyQt5 布局管理(水平、垂直、网格、表单、嵌套、QSplitter)
learn from 《PyQt5 快速开发与实战》 https://doc.qt.io/qtforpython/index.html https://www.riverbankcomputing.com/static/Docs/PyQt5
Michael阿明
2022/06/06
5.5K0
PyQt5 布局管理(水平、垂直、网格、表单、嵌套、QSplitter)
PyQt5高级界面控件之QTableWidget(四)
QTableWidget是Qt程序中常用的显示数据表格的控件,类似于c#中的DataGrid。QTableWidget是QTableView的子类,它使用标准的数据模型,并且其单元数据是通过QTableWidgetItem对象来实现的,使用QTableWidget时就需要QTableWidgetItem。用来表示表格中的一个单元格,整个表格就是用各个单元格构建起来的
全栈程序员站长
2022/08/18
5.6K0
PyQt5高级界面控件之QTableWidget(四)
PyQt5-QLabel控件是什么?方法有哪些?具体如何使用?
虫无涯
2023/11/10
6770
PyQt5 基本窗口控件(状态栏/窗口/图标/提示消息/QLabel/文本类控件)
文章目录 1. 状态栏 2. 窗口居中显示 3. 关闭窗口 4. QWidget 5. 添加图标 6. 气泡提示信息 7. QLabel 添加快捷键 8. QLineEdit echoMode 验证器 inputMask 综合练习 9. QTextEdit learn from 《PyQt5 快速开发与实战》 1. 状态栏 self.statusbar.showMessage("hello, Michael", 2000),第二个参数是显示多长时间ms,默认无限长时间 # -*- coding: utf-8
Michael阿明
2022/05/10
2.9K0
PyQt5 基本窗口控件(状态栏/窗口/图标/提示消息/QLabel/文本类控件)
Python 图形界面框架 PyQt5 使用指南!
使用Python开发图形界面的软件其实并不多,相对于GUI界面,可能Web方式的应用更受人欢迎。但对于像我一样对其他编程语言比如C#或WPF并不熟悉的人来说,未必不是一个好的工具。
快学Python
2021/12/13
12.2K0
Python 图形界面框架 PyQt5 使用指南!
Qt官方示例-QLineEdit编辑器
  这只允许用户在遵循简单规则的行编辑中键入字符,使用不同的掩码在编辑前将会预先固定显示相应的字符掩码。
Qt君
2020/02/10
1.6K0
PyQt5 入门
我的路径是:D:\ProgramData\Anaconda3\envs\cv\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
Michael阿明
2022/05/10
1.6K0
PyQt5 入门
qlineedit输入提示_qlineedit设置不可编辑
QLineEdit.NoEcho:不显示任何输入的字符,常用于密码类型的输入,且长度保密
全栈程序员站长
2022/11/08
5.6K0
qlineedit输入提示_qlineedit设置不可编辑
pyqt5 lineedit_pyqt5 tablewidget
定义输入掩码的字符 下表列出了输入掩码的占位符和字面字符,并说明其如何控制数据输入
全栈程序员站长
2022/11/08
1.6K0
pyqt5 lineedit_pyqt5 tablewidget
PyQt5(designer)入门教程
2019/12/11更新:我平时不看CSDN的,之前一时兴起发了过来,没想到反响还不错。这次就顺便把后来新增的一个小节放上来,并且在文末增加了我的GitHub(一看GitHub就知道我是个菜鸡,大家都是互相学习啦~)
全栈程序员站长
2022/10/05
2.9K0
PyQt5(designer)入门教程
PyQt5-Qt Designer中控件的尺寸相关设置(sizePolicy策略)
虫无涯
2023/10/09
3.9K0
PyQt 编程入门(五)
本篇将介绍调色板QPalette的应用和文本对齐的设置,还涉及到字体QFont的设定。
用户6021899
2019/08/14
1.1K0
PyQt5-Qt Designer控件之间的伙伴关系和Tab顺序如何设置?
虫无涯
2023/10/13
7250
PyQt5-Qt Designer中如何设置信号与槽?
虫无涯
2023/10/18
1.5K0
PyQt 自定义窗口部件(三)
Y形管由abci、edcf 以及cihgf三部分组成,内部的颜色由流体的流速决定。各个部分均使用逻辑坐标系绘制。
用户6021899
2019/08/14
7280
相关推荐
一篇文章让你读懂PyQt5布局管理,绝对干货
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档