Two-Factor Authentication
更新时间: 2026/04/25
在Gitcode上查看源码

双因素认证介绍

双因素认证(Two-Factor Authentication,简称 2FA)是一种安全验证过程,使用客户端证书密码以及证书来进行认证,登录时需要同时拥有客户端证书及证书密码才能认证通过,解决了传统的帐号口令认证中口令泄露导致的入侵问题。

证书制作

以下使用XCA工具应用相应的模板创建和导出根证书、客户端证书和导出证书私钥作为示例。证书之间的关系图如下:

创建CA根证书

  1. 打开证书页签,点击创建证书, 在来源页面选择参数如下,再点击应用模板所有信息

    • 签名请求: 从签名请求复制扩展信息
    • 签名: 创建自签名证书
    • 签名算法:[default] CA
  2. 切换到主体页签,填写内部名称(如:2FA_CA)和Distinguished Name信息; 点击生成新密钥,密钥长度选择4096及以上,并创建。

  3. 切换到扩展页签,检查类型是否为CA,和并根据需要调整有效期时间。

  4. 切换到密钥用法页签,证书用途(Key Usage)和证书扩展用途(Extended Key Usage)选择如下图所示:

  5. 点击右小角OK,创建CA根证书成功。

创建客户端证书

  1. 打开证书页签,点击创建证书, 在来源页面选择参数如下,再点击应用模板所有信息

    • 签名请求: 从签名请求复制扩展信息
    • 签名: 使用此CA证书进行签名 (选择之前创建的2FA_CA
    • 签名算法:[default] TLS_client

  2. 切换到主体页签,填写内部名称(如:2FA_Client_Cert)和Distinguished Name信息(其中,commonName不能和CA根证书一样); 点击生成新密钥,密钥长度选择4096及以上,并创建。

  3. 切换到扩展页签,检查类型是否为最终实体,和并根据需要调整有效期时间。

  4. 切换到密钥用法页签,证书用途(Key Usage)和证书扩展用途(Extended Key Usage)选择如下图所示:

  5. 点击右小角OK,创建客户端证书成功。

导出证书

  1. 打开证书页签,选择CA根证书,右键点击,选择导出 -> 文件,导出格式选择PEM(*.cert),完成根证书导出。
  2. 选择客户端证书,右键点击,选择导出 -> 文件,导出格式选择PEM(*.cert),完成客户端证书导出。
  3. 选择客户端证书,右键点击,选择导出 -> 文件,导出格式选择PKCS #12 chain (*.pfx),并输入加密密码,导出证书链和加密私钥。

证书使用

证书导入BMC

NOTE

开启双因素认证之前需要导入根证书和客户端证书,否则无法开启双因素认证。

  1. 登录BMC,在用户&安全 -> 证书管理 -> CA证书管理页面上传CA根证书。
  2. 用户&安全 -> 双因素认证页面, 选择对应的用户上传客户端证书。

证书导入浏览器

以下以Windows系统的Chrome浏览器为例:

  1. 打开设置, 进入 隐私设置和安全性 -> 安全 -> 管理证书。
  2. 在证书管理器页面,选择管理从Windows导入的证书。
  3. 使用Windows的证书导入向导,选择*.pfx;*.p12的证书,导入。

使用双因素认证

  1. 登录BMC,在用户&安全 -> 双因素认证页面开启双因素认证。
  2. 使用Chrome无痕模式打开页面,首次访问BMC会弹出选择证书,选择对应的证书。
  3. 至此,完成了双因素认证登录。

WARNING

开启双因素认证会关闭SSH端口,当关闭双因素认证后,需要手动在端口服务页面开启SSH端口。

常见问题定位

  1. 开启双因素认证后,浏览器访问BMC,报错No required SSL certificate was sent

    原因分析

    • 浏览器未导入客户端证书
    • 浏览器有缓存(清空缓存或使用无痕模式重新访问)
  2. 开启双因素认证后,浏览器访问BMC,报错The SSL certificate error

    原因分析

    • 导入的证书生成的有问题
    • 证书被吊销
    • 证书不在有效期
  3. 开启双因素认证后,浏览器访问BMC,登录显示双因素认证登录失败

    原因分析:浏览器选择的客户端证书和BMC里导入的客户端证书不匹配

补救措施

开启双因素认证后,尝试各个方法后仍然无法登录,使用ipmi命令关闭双因素认证,命令如下:ipmitool -H <IP> -I lanplus -p 623 -U <管理员用户> -P <密码> -C 17 raw 0x30 0x92 0xdb 0x07 0x00 0x52 0x00 0x00