跳到主内容

概述

Casdoor中的证书保存着用于签名和验证令牌(例如JWT)以及保障集成安全(SAML、支付提供商)的加密密钥。

证书属性

每个证书都具有:

  • 所有者: 拥有证书的组织
  • 名称: 证书的唯一名称
  • 创建时间: 证书的创建时间
  • 显示名称: 证书的可读名称
  • 范围:证书的适用范围(例如,JWTSAML支付
  • 类型:证书的类型(例如,x509支付
  • 加密算法:所使用的加密算法(例如,RSA 使用 RS256,ECDSA 使用 ES256
  • 位大小: 密钥的位数(例如:2048、4096)
  • 有效期/年: 证书的有效期,单位为年
  • 证书: 公共证书内容
  • 私钥: 私钥内容(已安全存储)

SSL证书字段

类型为 SSL 的证书具有用于基于 ACME 的自动续订的附加字段:

字段描述
到期时间当前证书的到期时间戳(只读,自动填充)
域名到期时间域名注册的到期时间戳(只读,来自WHOIS查询)
提供商用于DNS-01 ACME挑战的DNS提供商:AliyunGoDaddy
账户ACME账户邮箱地址
AccessKeyDNS 提供商 API 密钥/访问密钥 ID
AccessSecret*DNS 提供商 API 密钥

当您点击SSL证书上的续订时,Casdoor会联系ACME服务,通过已配置的DNS提供商完成DNS-01验证挑战,并自动存储颁发的证书和私钥。

证书适用范围

证书的使用方式因其适用范围而异:

JWT证书

JWT证书用于签名和验证JSON Web令牌。 当用户登录时,访问令牌会使用JWT证书的私钥进行签名。

Casdoor支持用于JWT令牌的RSA和ECDSA签名算法。 虽然RSA(RS256、RS384、RS512)一直是传统之选,但ECDSA算法(ES256、ES384、ES512)在同等安全级别下可提供更小的签名尺寸和更快的签名验证速度。 这有助于减小移动端的令牌大小,或在高吞吐量场景中提升性能。

对于JWT证书,请根据安全性和兼容性选择RSA或ECDSA。 配置Casdoor SDK时,请使用证书编辑页面上的公钥(复制或下载)。

证书管理

证书编辑

创建JWT证书后,在您的应用设置中选择它:

证书选择

SAML证书

SAML证书在单点登录集成中对SAML断言进行签名和加密。

用例:

  • 基于SAML的SSO集成
  • 签署SAML响应
  • 为安全起见对SAML断言进行加密

对于SAML,为身份提供商(IdP)和服务提供商(SP)创建证书,以确保通信安全。

有关 SAML 配置的更多信息,请参阅【SAML 文档】(/docs/how-to-connect/saml/overview).

支付证书

支付证书可确保与支付提供商(例如支付宝、微信支付)的通信安全。

用例:

  • 使用支付网关保护API通信
  • 签署支付请求
  • 验证支付回调

例如,为支付宝创建证书:

  • 应用证书:包含应用程序的公钥证书和私钥
  • 根证书:包含支付提供商的证书

支付宝App证书

有关详情,请参阅支付宝微信支付

创建证书

要添加证书:

  1. 导航至Casdoor管理控制台中的证书页面
  2. 单击添加按钮以创建新证书
  3. 填写必填字段:
    • 名称*:证书的唯一标识符
    • 显示名称:可读性高的名称
    • 范围:选择合适的范围(JWT、SAML、支付)
    • 类型:选择证书类型
    • 加密算法:选择加密算法(例如,RS256用于RSA,ES256用于ECDSA)。 对于JWT证书,支持RSA和ECDSA两种算法
    • 位数: 设置密钥大小(通常为2048或4096位)
    • 有效期(年): 设置有效期
  4. 或者:
    • 通过保存表单自动生成新证书
    • 上传现有证书和私钥

使用证书

在应用中

创建JWT证书后,将其关联到您的应用程序:

  1. 转到应用页面
  2. 编辑您的应用
  3. 证书字段中,选择您创建的证书
  4. 保存应用

该证书现在将用于签署由该应用程序颁发的所有令牌。

在SDK配置中

在后端配置Casdoor SDK时,请提供JWT证书中的公钥:

var CasdoorEndpoint = "https://door.casdoor.com"
var ClientId = "541738959670d221d59d"
var ClientSecret = "66863369a64a5863827cf949bab70ed560ba24bf"
var CasdoorOrganization = "casbin"
var CasdoorApplication = "app-casnode"

//go:embed token_jwt_key.pem
var JwtPublicKey string

func init() {
auth.InitConfig(CasdoorEndpoint, ClientId, ClientSecret, JwtPublicKey, CasdoorOrganization, CasdoorApplication)
}

从Casdoor的证书编辑页面下载公钥。

有关SDK配置的更多信息,请参阅SDK文档

在支付提供商中

在设置支付提供商时,请配置相应的证书:

  1. 创建所需的证书(例如,支付宝的应用证书和根证书)
  2. 前往提供商页面
  3. 编辑或创建您的支付提供商
  4. 证书字段中,选择您创建的证书
  5. 保存提供商

最佳实践

  • 密钥长度: RSA 密钥至少使用 2048 位;为获得更高安全性,可使用 4096 位。
  • 有效期:* 设置合理的有效期(例如,生产环境中为 1 至 5 年)。
  • 安全性: 绝不要在客户端代码或公共仓库中暴露私钥。
  • 轮换: 在证书到期前进行轮换。
  • 备份: 存储证书和私钥的安全备份。
  • 分离: 对JWT、SAML和支付使用独立的证书,以在密钥泄露时限制影响范围。

证书管理

通过以下方式管理证书:

  • Web UI:Casdoor管理控制台提供了一个用户友好的界面,用于证书管理
  • API: 使用Casdoor REST API以编程方式管理证书
  • 数据初始化: 证书可包含在初始化文件中,用于自动化部署

有关数据初始化的更多信息,请参阅数据初始化文档