gpt4 book ai didi

powershell - IX509Extension XCN编码?

转载 作者:行者123 更新时间:2023-12-04 17:03:41 25 4
gpt4 key购买 nike

我从阅读中了解到MSDNX509 v3 扩展必须是手工制作的。这涉及CRL、AIA、名称和策略约束、策略映射、私钥使用期限和主题目录属性。

我试图制作一个 CRL 分发点,但结果是垃圾:

    $crlExt = New-Object -ComObject X509Enrollment.CX509Extension
$crlOid = New-Object -ComObject X509Enrollment.CObjectId
$crlOid.InitializeFromValue('2.5.29.31')
$crlValue = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('http://www.test.com'))
$crlExt.Initialize($crlOid, 0x1, $crlValue)
$crlExt.Critical = $false

是否有任何关于如何对以下每个值进行编码的引用?我到处搜索,但没有运气。

  • 权限信息访问
  • CrlDistributionPoints
  • 最新鲜的CRL
  • 名称约束
  • 策略约束
  • 政策映射
  • PrivateKeyUsagePeriod
  • 主题目录属性

请注意,这是关于 Windows 中的 certenroll com 接口(interface)。 openssl 在这里不适用。

最佳答案

我刚刚在 C# 中遇到了同样的问题,试图通过 CertEnroll.dll 生成带有 CDP(CRL 分发点)扩展的证书

我能完成这项工作的唯一方法是在字节级别手工制作扩展,尽管我没有找到任何关于字节应该如何排序或某些字节的含义的文档。为了解决这个问题,我在 Linux 中使用 OpenSSL 生成了一些证书并检查了 C# 中的原始字节(在 X509Certificate2 class 中加载证书并查看 Extensions 属性。X509Extension class 有一个 RawData 属性)。

您应该能够将我的代码转换为 PowerShell,所以我最终得到了:

var urisStr = new string[]
{
"http://pki.example.com/list.crl"
};
var uris = urisStr.Select(u => Encoding.UTF8.GetBytes(u));
var zero = new byte[] { 48 }; //"0", delimiter ?
var nbsp = new byte[] { 160 }; //" ", separator ?
var dagger = new byte[] { 134 }; //"dagger", separator ?

var zeroSize = zero.Length + 1;
var nbspSize = nbsp.Length + 1;
var daggerSize = dagger.Length + 1;

var col = new List<byte>();
col.AddRange(zero); //delimiter
int totalBytes = uris.Sum(u => u.Length);
totalBytes += (zeroSize + (nbspSize * 2) + daggerSize) * uris.Count();
col.Add((byte)totalBytes); //size of everything it contains

foreach (var uri in uris)
{
var uriSize = uri.Length;
col.AddRange(zero); //delimiter
col.Add((byte)(nbspSize + nbspSize + uriSize + daggerSize)); //size of everything it contains
col.AddRange(nbsp);
col.Add((byte)(nbspSize + uriSize + daggerSize)); //size of everything it contains
col.AddRange(nbsp);
col.Add((byte)(uriSize + daggerSize)); //size of everything it contains
col.AddRange(dagger); //separator ?
col.Add((byte)uriSize);
col.AddRange(uri);
}
var bytes = col.ToArray();
var base64 = Convert.ToBase64String(bytes);

var oidCDP = new CObjectId();
oidCDP.InitializeFromName(CERTENROLL_OBJECTID.XCN_OID_CRL_DIST_POINTS);

// There is no specific class to CDPs, so we use the CX509Extension
var crlList = new CX509Extension();
crlList.Initialize(oidCDP, EncodingType.XCN_CRYPT_STRING_BASE64, base64);
certRequest.X509Extensions.Add(crlList);

请注意,我没有找到任何关于我生成的字节格式的文档,因此此代码没有官方依据。它仅基于对工作证书的观察。

关于powershell - IX509Extension XCN编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35864912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com