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

CFML/Lucee中Bouncy Castle创建GeneralName触发参数类型不匹配错误

在CFML/Lucee中使用Bouncy Castle 1.76生成带SAN的CSR

问题分析

你遇到的「参数类型不匹配」错误,核心原因是错误使用了ASN.1类型的getInstance()方法——这个方法用于解析已编码的ASN.1数据,而非创建新的实例。同时IP地址的ASN.1类型构造方式也有误。

修正后的完整代码

// Add Subject Alternative Names
var vector = createObject("java", "org.bouncycastle.asn1.ASN1EncodableVector").init();

// 1. 添加DNS名称
var GeneralName = createObject("java", "org.bouncycastle.asn1.x509.GeneralName");
var DERIA5String = createObject("java", "org.bouncycastle.asn1.DERIA5String");

// 直接实例化DERIA5String(而非用getInstance解析)
var fqdnASN1 = DERIA5String.init(arguments.fqdn);
// 使用GeneralName的常量指定类型,避免硬编码数值
vector.add(GeneralName.init(GeneralName.dNSName, fqdnASN1));

// 2. 添加IP地址
if (len(trim(arguments.ipAddress))) {
    var inetAddress = createObject("java", "java.net.InetAddress").getByName(arguments.ipAddress);
    var DEROctetString = createObject("java", "org.bouncycastle.asn1.DEROctetString");
    
    // 用IP地址的byte数组直接构造DEROctetString
    var ipASN1 = DEROctetString.init(inetAddress.getAddress());
    vector.add(GeneralName.init(GeneralName.iPAddress, ipASN1));
}

// 组装GeneralNames
var derSequence = createObject("java", "org.bouncycastle.asn1.DERSequence").init(vector);
var generalNames = createObject("java", "org.bouncycastle.asn1.x509.GeneralNames").init(derSequence);

关键修正点

  • DNS名称部分:

    • 替换DERIA5String.getInstance(arguments.fqdn)为DERIA5String.init(arguments.fqdn):getInstance()用于解析已存在的ASN.1编码数据,而创建新的IA5字符串需要直接调用构造函数(CFML中对应init()方法)。
    • 使用GeneralName.dNSName常量替代硬编码的2,提升代码可读性和兼容性。
  • IP地址部分:

    • 替换DEROctetString.getInstance(inetAddress.getAddress())为DEROctetString.init(inetAddress.getAddress()):同样,getInstance()不是构造新对象的正确方式,直接传入byte数组构造DEROctetString即可。
    • 使用GeneralName.iPAddress常量替代硬编码的7,避免数值错误。

验证说明

修正后代码会正确生成符合ASN.1规范的GeneralName实例,将其加入ASN1EncodableVector后,即可正常组装成GeneralNames扩展,最终嵌入CSR中。不含SAN的CSR能正常生成,说明基础CSR流程无问题,仅SAN部分的ASN.1对象构造有误。

内容的提问来源于stack exchange,提问作者George Murphy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:29:57