You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ServiceNow中验证CSR格式合规且密钥长度为2048

ServiceNow CSR提交校验客户端脚本实现方案

核心校验目标

  • 验证CSR是否包含标准的首尾头标记,格式合法
  • 验证CSR对应的密钥长度为2048位

实现代码

以下为可直接使用的onSubmit类型客户端脚本,需部署在对应证书申请表单的客户端脚本中:

function onSubmit() {
    // 请替换为表单中存储CSR内容的实际字段名称
    const CSR_FIELD_NAME = 'u_csr_content';
    const csrContent = g_form.getValue(CSR_FIELD_NAME).trim();

    // 空值校验
    if (!csrContent) {
        g_form.showFieldMsg(CSR_FIELD_NAME, '请输入CSR内容', 'error');
        return false;
    }

    // 1. 校验CSR头格式
    const csrFormatReg = /^-----BEGIN CERTIFICATE REQUEST-----[\s\S]*-----END CERTIFICATE REQUEST-----$/;
    if (!csrFormatReg.test(csrContent)) {
        g_form.showFieldMsg(CSR_FIELD_NAME, 'CSR格式错误,请确认包含标准的BEGIN/END首尾标记', 'error');
        return false;
    }

    // 2. 提取CSR主体内容校验密钥长度
    try {
        // 提取Base64编码的CSR主体,去除所有空白字符
        const b64CsrBody = csrContent
            .replace('-----BEGIN CERTIFICATE REQUEST-----', '')
            .replace('-----END CERTIFICATE REQUEST-----', '')
            .replace(/\s/g, '');
        // 解码为DER格式二进制数据
        const derCsr = atob(b64CsrBody);
        // 解析公钥modulus长度:2048位密钥对应modulus长度为256字节
        let modulusLen = derCsr.charCodeAt(33) & 0xff;
        if (modulusLen === 0x82) {
            modulusLen = (derCsr.charCodeAt(34) << 8) + derCsr.charCodeAt(35);
        }
        if (modulusLen !== 256) {
            g_form.showFieldMsg(CSR_FIELD_NAME, 'CSR密钥长度不符合要求,仅支持2048位密钥', 'error');
            return false;
        }
    } catch (err) {
        g_form.showFieldMsg(CSR_FIELD_NAME, 'CSR内容解析失败,请上传合法的CSR文件', 'error');
        return false;
    }

    // 所有校验通过,允许提交
    return true;
}

部署步骤

  • 登录ServiceNow后台,进入系统定义 > 客户端脚本(System Definition > Client Scripts)
  • 新建客户端脚本,关联到你的证书申请对应表
  • 类型选择onSubmit,勾选适用的视图(如管理员视图)
  • 将上述代码复制到脚本编辑框,替换CSR_FIELD_NAME常量的值为你实际的CSR字段名
  • 保存后即可生效

内容的提问来源于stack exchange,提问作者James T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:45:03