当前位置: 首页 > 知识库问答 >
问题:

我可以从Azure Key Vault创建CSR吗?

贾烨
2023-03-14

在key Vault中生成公钥以及随后的CSR是否可能?我在文档中没有看到任何关于生成相应公钥的提及?(或者我只是不明白HSM的本质?)

似乎可以在其他地方创建密钥和CSR,并将私钥导入到密钥库HSM中。这显然不如在HSM之外从未存在过的私钥好。

共有1个答案

阚吕恭
2023-03-14

下面是一种在Windows上执行此操作的方法

>

  • 使用Azure Key Vault SDK for.NET在Azure Key Vault中的HSM中创建密钥对

    // Assuming you have a keyVaultClient object using the SDK
    var keyBundle = keyVaultClient.CreateKeyAsync(keyVaultUri, "myKey01", "RSA-HSM", 2048).GetAwaiter().GetResult();
    

    获取所创建密钥对的公钥作为CSP blob

    var rsaCryptoProvider = new RSACryptoServiceProvider();
    var rsaParameters = new RSAParameters()
    {
        Modulus = keyBundle.Key.N,
        Exponent = keyBundle.Key.E
    };
    rsaCryptoProvider.ImportParameters(rsaParameters);
    var cspBlob = rsaCryptoProvider.ExportCspBlob(false);
    
    [DllImport("ncrypt.dll", CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
    private static extern ErrorCode NCryptOpenStorageProvider(
        [Out] out SafeNCryptProviderHandle phProvider,
        string pszProviderName,
        uint dwFlags);
    
    SafeNCryptProviderHandle providerHandle = null;
    var result = NCryptOpenStorageProvider(
        out providerHandle,
        null,
        0);
    

    b.使用NCryptImportKey(SO上的链接限制,搜索MSDN)

    [DllImport("ncrypt.dll", CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
    private static extern int NCryptImportKey(
        SafeNCryptProviderHandle hProvider,
        IntPtr hImportKey,     // NCRYPT_KEY_HANDLE
        string pszBlobType,
        IntPtr pParameterList, // NCryptBufferDesc *
        [Out] out SafeNCryptKeyHandle phKey,
        [MarshalAs(UnmanagedType.LPArray)] byte[] pbData,
        int cbData,
        uint dwFlags);
    

    将cspBlob从(2)导入到密钥服务提供程序中

    SafeNCryptKeyHandle keyHandle;
    var result = NCryptImportKey(
        providerHandle,
        IntPtr.Zero,
        "CAPIPUBLICBLOB",
        IntPtr.Zero,
        out keyHandle,
        cspBlob,
        cspBlob.Length,
        0x00000040);
    

    c.keyHandle现在可以与CryptExportPublicKeyInfo一起使用-(SO上的链接限制,搜索MSDN)为CSR对象创建CERT_PUBLIC_KEY_INFO结构。请参阅文档中提供的示例。

    填写PKCS10(CSR)的其他字段,并对其进行ASN1编码。

    使用apporriate哈希html" target="_blank">算法创建(5)的编码结果的哈希。使用(1)中创建的密钥对的私钥对哈希签名

    var signature=KeyVaultClient.SignAsync(KeyBundle.KeyIdentifier.Identifier,“rs256”,hash).GetAwaiter().GetResult();

  •  类似资料:
    • 我使用具体化泛型来捕获

    • 我正在尝试查找相关的JPA文档,但很难找到任何指定是否允许我创建实体的ElementCollection的内容。我知道典型的用法是将@Embedded的@ElementCollection制作成一个@ElementCollection,但由于我遇到了一个Hibernate bug,我需要将我的可嵌入类制作成它自己的实体。 我希望实体的生命周期由父类控制。因此,我希望不要为新实体创建任何DAO/存储

    • 我必须从Postgres表中读取配置并广播它,以使用它过滤主数据流。我正在使用Flink广播状态进行此操作。当我从本地套接字获取配置时,它工作得很好。 用例是在Flink作业中从Postgres读取最新配置,而无需重新启动作业。 我们可以从Postgres表创建Flink数据流吗?如果可能的话,它是否有效,因为它将永远保持JDBC连接的活性?

    • 我想将用户输入存储到ArrayList中,然后将该ArrayList放入另一个ArrayList中。这有点像一个主类别,它包含包含数据的子类别。 以下是一些代码: 我可以在"main Cat"ArrayList中添加"subCat"ArrayList吗?

    • 问题内容: 我们有2个数据库-DB1和DB2。 我可以在DB1中创建一个与DB2中的一个表有关系的表吗?换句话说,我的表中是否可以有来自另一个数据库的外键? 我用不同的用户连接到这些数据库。有任何想法吗? 现在,我收到错误消息: ORA-00942:表或视图不存在 问题答案: 不可以,Oracle不允许您创建通过数据库链接引用表的外键约束。您将必须使用触发器来强制执行完整性。

    • 有什么方法可以为我创建的类使用自动装箱吗?例如,我有的子类。 现在,< code > UnsignedInteger I = new UnsignedInteger(88);工作得非常好,但是有什么方法可以让这个编译:< code > UnsignedInteger i = 88?对我来说不会。提前感谢!