我如何验证用于证书签名请求的字段格式是否正确且密钥长度为 2048

How can i validate a field that is for a Certificate Signing Request is in the correct format and has a keylength of 2048

我已经为管理员编写了一个输入表单(在 ServiceNow 中)以通过证书颁发机构集成请求新证书。但是在提交之前,我想验证证书签名请求是否具有正确的 headers 和 2048 的密钥长度。

企业社会责任示例:

-----BEGIN CERTIFICATE REQUEST-----
MIICpTCCAY0CAQAwYDEqMCgGCSqGSIb3DQEJARYbamFtZXN0b21saW5zb25AbmJu
Y28uY29tLmF1MSUwIwYDVQQDDBxTZXJ2aWNlTm93LlRlc3QuSnVseTIxLkxvY2Fs
MQswCQYDVQQGEwJBVTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpd
VbZG3Ph+UdiOYh+zFqH6pIavANGytWcvEnloG/DboW+JxpWQBqmZqvOZgWnPyC06
wS4f/YpElLFX83/+jLc6Gt3B/QDgfxhGaVnurDx56RvTM1LQVfBZJ3l+OYUmAof+
YB25aRhKQ4krWvXGMUujoi5QSl9yNZlAIzgpjgJ7cRHcbUhlOdcQVz/WnC2dcWB3
H/vLPIzciODOrzwIq1lSJ3OkdOJJ23Ifu19e9ySJsWYoC28THm6Ub8Z9gHHlPTfO
im5UxZFBZjLkx/YphQNNqcMxFMCO/CDo1bZlggws61O2liPzC8LpGwkroYIxngoQ
5rbvm/uyG/HelAFZYT0CAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQCouy3b62xV
Bu4Scd38HMgtaTCHOndutsuwNnYF6SpxdSTYYMVQIa+gHy3N4vpQ+lNboPlOhsQd
58Jt9iwnmYCR32d36FVmsIpu5xAwweQUBK5v/GIPx5yjY0k8bTFC3vJUsIxbClwC
UtUE5p7p+Ulm+4olk/+VYeKtvE+l+e89NQ4sBlOE5JVSulRsxLjRfQscvj/0Ln/7
7iZQxfgL/Vv1UUBiLfTEmfSyu5i7IomoAUBSJ9xipbh5OWolqHzIBmpQY504Es3X
Ojs9d6KwyCSu5S2yUoj98C+OidqkHXDSfwWQSCfWn1vCuTFQlFS5viYK2pzIjozE
71owCWT8RpGd
-----END CERTIFICATE REQUEST-----

我打算编写一个快速的客户端脚本来验证输入,但我对语法有点困惑。任何帮助表示赞赏。

这将很难做到...

检查 CSR headers 相对简单...您可以在 onSubmit 脚本中执行如下操作

var totalString = g_form.getValue('fieldName').trim();
var headerString = totalString.slice(0, 35);
var encodedCertString = totalString.substring(35, totalString.length - 33);
var footerString = totalString.slice(totalString.length - 33);

var validCert = true;
validCert &= (headerString == '-----BEGIN CERTIFICATE REQUEST-----');
validCert &= (footerString == '-----END CERTIFICATE REQUEST-----');
if(!validCert){
    g_form.addErrorMessage('CSR in field missing correct headers');
    return false;
}

事情变得“有趣”的地方是 headers 和 CSR 的页脚之间是一个 Base64 编码的 PKCS10 二进制数据块。编写一个函数来处理二进制数据通常超出了您在客户端函数中想要做的事情…… public 密钥本身只是该 PCKS10 二进制包的一部分……而不是全部……所以没有简单的方法来“解码”它以遍历原始二进制位以找到实际密钥并测量其位长度。在此处查看 PCKS10 二进制包格式:https://en.wikipedia.org/wiki/Certificate_signing_request

大多数拥有在线 CSR 解码器的人实际上将输入传递给 OpenSSL,并让它解析请求并报告构成请求的所有数据...例如:https://redkestrel.co.uk/products/decoder/。您可以做类似的事情,但这样做需要 hackish/creative 使用自定义 MID 服务器脚本,您可以使用自定义探测器调用该脚本...再次......不是您想要在范围内弄乱的东西ServiceNow 客户端脚本。