如何使用 HashiCorp Vault 簽名

曼努埃爾

我不知道這個問題是否很簡單,我只是不知道如何用 HashiCorp-Vault 的 Api VaultSharp 簽名,但我很絕望。

可以在此處找到帶有示例的整個文檔:https ://github.com/rajanadar/VaultSharp Encryption and Decryption 工作正常。只有簽名是一個問題。
加密代碼:

public byte[] EncryptData(byte[] data, string keyName)
{
   SecretsEngine transitSecretsEngine = new SecretsEngine
   {
      Type = SecretsEngineType.Transit,
      Path = path
   };

   Client.V1.System.MountSecretBackendAsync(transitSecretsEngine).Wait();
   Client.V1.Secrets.Transit.CreateEncryptionKeyAsync(keyName, new CreateKeyRequestOptions()
   {
      Exportable = true
   }, path).Wait();
     
   EncryptRequestOptions encryptOptions = new EncryptRequestOptions
   {
      Base64EncodedPlainText = Convert.ToBase64String(data),
      ConvergentEncryption = true,
   };

   Secret<EncryptionResponse> encryptionResponse = Client.V1.Secrets.Transit.EncryptAsync(keyName, 
   encryptOptions, path).Result;
   
   string cipherText = encryptionResponse.Data.CipherText;
   return Encoding.Unicode.GetBytes(cipherText);
}

解密代碼:

public byte[] DecryptData(string ciphertext, string keyName)
{
   DecryptRequestOptions decryptOptions = new DecryptRequestOptions
   {
      CipherText = ciphertext,
   };
   Secret<DecryptionResponse> decryptionResponse = Client.V1.Secrets.Transit.DecryptAsync(keyName, 
   decryptOptions, path).Result;
   
   return Convert.FromBase64String(decryptionResponse.Data.Base64EncodedPlainText);
}

這是我的簽名代碼試用版:

public byte[] Sign(byte[] plaintextBytes, string keyName)
{
   byte[] hash = ComputeHash(plaintextBytes,SHA256.Create());
   GCKMS.SignatureOptions options = new GCKMS.SignatureOptions()
   {
      Digest = Convert.ToBase64String(hash),
   };
   Secret<GCKMS.SignatureResponse> result = Client.V1.Secrets.GoogleCloudKMS.SignAsync(keyName, 
   options).Result;
   return Encoding.Unicode.GetBytes(result.Data.Signature);
}

錯誤是:

VaultSharp.Core.VaultApiException: {"errors":["no handler for route 'gcpkms/sign/Manuel'"]}


最後但並非最不重要的是我的驗證簽名的代碼:

public bool ValidateSignature(byte[] plaintextByte, byte[] signature, string keyName)
{
   GCKMS.VerificationOptions option = new GCKMS.VerificationOptions
   {
      Digest = Encoding.Unicode.GetString(ComputeHash(plaintextByte)),
      Signature = Encoding.Unicode.GetString(signature)
   };
   Secret<GCKMS.VerificationResponse> result = 
   Client.V1.Secrets.GoogleCloudKMS.VerifyAsync(keyName, option).Result;
   return result.Data.Valid;
}

我不確定,但這可能是因為我沒有使用帶有路徑的 SecretsEngine。我找不到任何適用於 GoogleCloudKms 的 SecretsEngine。

有用信息:
我用Guid.NewGuid().ToString();.
ComputeHash 是一個自寫的函數,它使用給定的算法計算哈希。默認算法是 SHA256。
GCMS 是命名空間的簡短版本VaultSharp.V1.SecretsEngines.GoogleCloudKMS

非常歡迎任何想法和建議。
提前致謝!

ixe013

儘管 Vault 通過 Transit 提供了方便的簽名,但您使用的 C# 包裝器不支持它

Google KMS 確實提供簽名,但它的接口更複雜:您必須自己進行哈希處理並跟踪密鑰版本。

我的建議是你在你的 API 包裝器上玩一個把戲:

在將數據發送到 Vault 之前,您仍然必須對數據進行 base64 處理,以避免二進制編碼問題。

所以假設:

  • 你想簽署文本StackOverflow
  • 中轉後端安裝在transit
  • 您的簽名密鑰已命名my-key

這應該讓你開始:

var value = new Dictionary<string, object> { "input", Convert.ToBase64String(Encoding.UTF8.GetBytes("StackOverflow")) } };
var writtenValue = await vaultClient.V1.Secrets.KeyValue.V1.WriteSecretAsync("sign/my-key", value, "transit");

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何让 HashiCorp Vault 政策正确?

如何在Airflow中使用HashiCorp Vault?

Hashicorp Vault如何列出所有角色

Hashicorp Vault:无法使用Node-Vault写入秘密

如何使用Hashicorp Vault设置用户名/密码验证

如何像登录网站一样使用 Hashicorp Vault

如何在生产中使用Hashicorp Vault的AppRole?

如何在我使用kubernetes的领事(Hashicorp-consul)中将Vault(Hashicorp-vault)注册为服务?

Hashicorp Vault加密数据

HashiCorp Vault密封问题

如何连接到远程 hashicorp vault 服务器

在Hitcorp管道上使用Hashicorp Vault的最佳方法是什么?

在不同的环境中使用Hashicorp Vault和Spring Cloud

尝试使用KV时,Hashicorp Vault cli CLI返回403

HASHICORP VAULT:如何从文件中读取多个项目并将其写入Vault

Hashicorp Vault使Vault生成多个关键值

HashiCorp Vault填充kubernetes秘密

Hashicorp Vault用于文件存储?

从hashicorp vault 填充kubernetes Configmap

如何使用已生成的 AES 256 GCM 96 密钥(来自 Hashicorp Vault)加密数据?

如何在Kubernetes中为HashiCorp Vault UI设置入口

如何从运行的 Hashicorp Vault 服务器获取“root_key”?

如何将多个 Hashicorp Vault 策略映射到 GitHub 团队?

在Hashicorp Vault中,如何防止“ userpass”用户彼此更改策略和密码?

是否可以在Spring Boot应用程序中以冗余方式使用HashiCorp Vault?

Hashicorp Vault代理注入器:使用“ agent-inject-command”注释对base64解码机密

如何在 Centos 8 和 cloud-init 中使用 Hashicorp 的 Linux 存储库来安装 Vault

Hashicorp Vault:“代码:400。错误”错误消息

关闭hashicorp Vault服务器开发