4 changed files with 52 additions and 1 deletions
@ -0,0 +1,40 @@ |
|||||||
|
using System; |
||||||
|
using System.Security.Cryptography.X509Certificates; |
||||||
|
using System.Threading.Tasks; |
||||||
|
using VaultSharp; |
||||||
|
using VaultSharp.V1.AuthMethods.Token; |
||||||
|
|
||||||
|
namespace Bit.CryptoAgent.Services |
||||||
|
{ |
||||||
|
public class HashicorpVaultCertificateProviderService : ICertificateProviderService |
||||||
|
{ |
||||||
|
private readonly CryptoAgentSettings _settings; |
||||||
|
|
||||||
|
public HashicorpVaultCertificateProviderService(CryptoAgentSettings settings) |
||||||
|
{ |
||||||
|
_settings = settings; |
||||||
|
} |
||||||
|
|
||||||
|
public async Task<X509Certificate2> GetCertificateAsync() |
||||||
|
{ |
||||||
|
var authMethod = new TokenAuthMethodInfo(_settings.Certificate.VaultToken); |
||||||
|
var vaultClientSettings = new VaultClientSettings(_settings.Certificate.VaultServerUri, authMethod); |
||||||
|
var vaultClient = new VaultClient(vaultClientSettings); |
||||||
|
|
||||||
|
var mountPoint = string.IsNullOrWhiteSpace(_settings.Certificate.VaultSecretMountPoint) ? |
||||||
|
null : _settings.Certificate.VaultSecretMountPoint; |
||||||
|
var secret = await vaultClient.V1.Secrets.KeyValue.V2.ReadSecretAsync( |
||||||
|
path: _settings.Certificate.VaultSecretPath, |
||||||
|
mountPoint: mountPoint); |
||||||
|
|
||||||
|
if (secret?.Data?.Data?.ContainsKey(_settings.Certificate.VaultSecretDataKey) ?? false) |
||||||
|
{ |
||||||
|
var certData = secret.Data.Data[_settings.Certificate.VaultSecretDataKey] as string; |
||||||
|
return new X509Certificate2(Convert.FromBase64String(certData), |
||||||
|
_settings.Certificate.VaultSecretFilePassword); |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue