Skip to content

Commit

Permalink
feat: upgrade deps and use valid keyvault domains (#100)
Browse files Browse the repository at this point in the history
  • Loading branch information
koalaty-code committed Oct 6, 2022
1 parent cc0df96 commit edc500b
Show file tree
Hide file tree
Showing 19 changed files with 217 additions and 105 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,9 @@ jobs:
with:
dotnet-version: 6.0.x

- name: Add hosts to /etc/hosts
run: |
echo "127.0.0.1 localhost.vault.azure.net" | sudo tee -a /etc/hosts
- name: Verify
run: make verify
4 changes: 4 additions & 0 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ jobs:
with:
dotnet-version: 6.0.x

- name: Add hosts to /etc/hosts
run: |
echo "127.0.0.1 localhost.vault.azure.net" | sudo tee -a /etc/hosts
- name: Verify
run: make verify

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Azure.Security.KeyVault.Keys" Version="4.3.0" />
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.3.0" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.21.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="Azure.Security.KeyVault.Keys" Version="4.4.0" />
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.4.0" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.23.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
Expand Down
13 changes: 10 additions & 3 deletions AzureKeyVaultEmulator.AcceptanceTests/Secrets/CreateSecretTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,12 @@ public class CreateSecretTests

public CreateSecretTests()
{
_secretClient = new SecretClient(new Uri("https://localhost:5551/"), new LocalTokenCredential());
_secretClient = new SecretClient(new Uri("https://localhost.vault.azure.net:5551/"),
new LocalTokenCredential(),
new SecretClientOptions
{
DisableChallengeResourceVerification = true
});
}

[Fact]
Expand Down Expand Up @@ -42,8 +47,10 @@ public async Task ShouldBeAbleToCreateASecret()
Assert.NotNull(createdSecret.Id);
Assert.Equal(secret.Value, createdSecret.Value);
Assert.Equal(secret.Properties.Enabled, createdSecret.Properties.Enabled);
Assert.Equal(secret.Properties.ExpiresOn.Value.ToUnixTimeSeconds(), createdSecret.Properties.ExpiresOn.GetValueOrDefault().ToUnixTimeSeconds());
Assert.Equal(secret.Properties.NotBefore.Value.ToUnixTimeSeconds(), createdSecret.Properties.NotBefore.GetValueOrDefault().ToUnixTimeSeconds());
Assert.Equal(secret.Properties.ExpiresOn.Value.ToUnixTimeSeconds(),
createdSecret.Properties.ExpiresOn.GetValueOrDefault().ToUnixTimeSeconds());
Assert.Equal(secret.Properties.NotBefore.Value.ToUnixTimeSeconds(),
createdSecret.Properties.NotBefore.GetValueOrDefault().ToUnixTimeSeconds());
Assert.NotNull(createdSecret.Properties.Version);
Assert.Equal("local", createdSecret.Properties.Tags["environment"]);
Assert.Equal("true", createdSecret.Properties.Tags["testing"]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class GetSecretTests

public GetSecretTests()
{
_secretClient = new SecretClient(new Uri("https://localhost:5551/"), new LocalTokenCredential());
_secretClient = new SecretClient(new Uri("https://localhost.vault.azure.net:5551/"), new LocalTokenCredential());
}

[Fact]
Expand Down
2 changes: 1 addition & 1 deletion AzureKeyVaultEmulator/AzureKeyVaultEmulator.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.7" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.9" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
</ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion AzureKeyVaultEmulator/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public void ConfigureServices(IServiceCollection services)
OnChallenge = context =>
{
context.Response.Headers.Remove("WWW-Authenticate");
context.Response.Headers["WWW-Authenticate"] = "Bearer authorization=\"https://localhost:5001/foo/bar\", scope=\"foobar\", resource=\"https://some.url\"";
context.Response.Headers["WWW-Authenticate"] = $"Bearer authorization=\"https://localhost:5001/foo/bar\", scope=\"foobar\", resource=\"https://vault.azure.net\"";
return Task.CompletedTask;
}
};
Expand Down
22 changes: 18 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ For the Azure KeyVault Emulator to be accessible from other containers in the sa
echo '[req]'; \
echo 'distinguished_name=req'; \
echo '[san]'; \
echo 'subjectAltName=DNS.1:localhost,DNS.2:<emulator-hostname>')
echo 'subjectAltName=DNS.1:localhost,DNS.2:<emulator-hostname>,DNS.3:localhost.vault.azure.net,DNS.4:<emulator-hostname>.vault.azure.net')
```

1. Export a `.pks` formatted key using the public/private keypair generated in the previous step:
Expand All @@ -92,9 +92,9 @@ For the Azure KeyVault Emulator to be accessible from other containers in the sa
services:
...
azure-keyvault-emulator:
container_name: azure-keyvault-emulator
azure-keyvault-emulator:
image: basis-theory/azure-keyvault-emulator:latest
hostname: <emulator-hostname>.vault.azure.net
ports:
- 5001:5001
- 5000:5000
Expand Down Expand Up @@ -122,9 +122,23 @@ For the Azure KeyVault Emulator to be accessible from other containers in the sa
volumes:
- <path-to-certs>:/https
environment:
- KeyVault__BaseUrl=https://azure-keyvault-emulator:5001/
- KeyVault__BaseUrl=https://<emulator-hostname>.vault.azure.net:5001/
```

1. (Optional) Azure KeyVault SDKs verify the challenge resource URL as of v4.4.0 (read more [here](https://devblogs.microsoft.com/azure-sdk/guidance-for-applications-using-the-key-vault-libraries/)).
To satisfy the new challenge resource verification requirements, do one of the following:
1. Use an emulator hostname that ends with `.vault.azure.net` (e.g. `localhost.vault.azure.net`). A new entry may need to be added to `/etc/hosts` to properly resolve DNS (i.e. `127.0.0.1 localhost.vault.azure.net`).
1. Set `DisableChallengeResourceVerification` to true in your client options to disable verification.
```csharp
var client = new SecretClient(
new Uri("https://localhost.vault.azure.net:5551/"),
new LocalTokenCredential(),
new SecretClientOptions
{
DisableChallengeResourceVerification = true
});
```

## Development

The provided scripts will check for all dependencies, start docker, build the solution, and run all tests.
Expand Down
30 changes: 30 additions & 0 deletions azure-keyvault-emulator.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFPDCCAySgAwIBAgIJAN6yZUBL6I4XMA0GCSqGSIb3DQEBCwUAMCIxIDAeBgNV
BAMMF2F6dXJlLWtleXZhdWx0LWVtdWxhdG9yMB4XDTIyMTAwNDEzMzMyMloXDTMy
MDcwMzEzMzMyMlowIjEgMB4GA1UEAwwXYXp1cmUta2V5dmF1bHQtZW11bGF0b3Iw
ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC0NIpwcSq9bQiciTprOLGf
6TwqvdPAO1XlB3B6m0kVhD3wdj7+R3qePeuhFhAGUCczlbMqg47L2Vca6u7ieIna
mPBA0G+fTk486T96qK26XUumVwdbrs5fNrWCCQlD9O5kV1pp2N3AQ6pi5FdMfOWD
cSdvjRIZdhm/PVFWX2PD9xbyJIrPClIGeEcz/hzx4xeRSF4fRGrCaR8GAOJLbG1e
si8SZIXer/bek0iSlrBCUDjcqFVRg3nFMrc85abO7ZDTHbDYxFbEAG+Jd1UXb/y4
PJCOgK3LTRFprW0U9qPnyrrtHL+zsMCWX4nESeoqkwBsW3XBH/reer3HZOGEk7KJ
OHxZWQGxl+dP+s3kGCjxBCtWbraceFlqbYVwqUG3zZc/M/0g6oNxRuCJS66oUq/5
XnPZUoTvYDoblKFdlKt6ycNjENu2fDzOgsf6c+qNq+ZlT1CAcwR4NGW6lZ3V29+C
cz/ECztfEwpbZdQFl5aCzMmZD5l3/K8HKFltyxQmtwS7K1cHVzxwMvSCVnV87op6
EMpUHZ8895KDmZccb25O+B6pW2VEERCUIxC+O6Vb6M0ppUsfJnOd3Qut77NHYKkg
FHCjetzPRX4zHuntpSKPZ4Ax5wexfm7tIbOqCI1VImEzVYdlO4chPA3ceREz4A4o
eGs3zoJcJe7gVHOWisinYQIDAQABo3UwczBxBgNVHREEajBogglsb2NhbGhvc3SC
F2F6dXJlLWtleXZhdWx0LWVtdWxhdG9yghlsb2NhbGhvc3QudmF1bHQuYXp1cmUu
bmV0gidhenVyZS1rZXl2YXVsdC1lbXVsYXRvci52YXVsdC5henVyZS5uZXQwDQYJ
KoZIhvcNAQELBQADggIBAC4tiVEKxmFUPRTsdejW8hETf2RLs2XZYLx7Nz0fPiJD
xUi2Y39R3yHOrcxxOGMgEIg1HiuVALqWVfwTWhlFkChNDNIjknpMNvK1SONWpYcx
6RXg41M9N5myAdxrD5lrjsJ5/FlxYMPp5ONJ2g8Iu4iPpuHu6kpBnMLAXDsnsPzh
fHgswJesE3AJlfEJi4Zftv0BPs3cpfrPYaAHCz9kHBsipKbKYc112wwArcqUh9T6
BBu8yDjCmKxcrmo8JhSUu4qjBD+YjLyP5TjBIVF84cDHbw4OTFh0QWk5nntQg3sB
2vO5KJpcIIjQYMBrHalipj/tKZAVk3KT64QSBECCf+rxH8zDphED/fOmo55K3v0S
Jrewsdxmuo7KBWzklZ9gzbIdow7/fen90QUl1v33C9cXIS5DfodstOsm10H4k34A
pL05Uz1YYxtAT0ezPmwRKTC9bJ5C4INR+m++4YOtZwwXIXKM35mb6PTGhx8l4J/N
yIzrK/kCbPMPxoH2qjvDuPPeNedccQS6ONaV5NLKE6CBmYIumqgKwEf/n6v/Ns62
ka1ym8G5rIFwriE1vOj2GVOlnsh6jsKwfRq8WL+Xom1lCTsXORBS+zc3KT/gy74Q
Dkm/ftCTgP+KQA5Of9P+wLmZSUuqGCUhFuDfna8vwBcRBeVYifqcmeu1nj7ejLzf
-----END CERTIFICATE-----
52 changes: 52 additions & 0 deletions azure-keyvault-emulator.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQC0NIpwcSq9bQic
iTprOLGf6TwqvdPAO1XlB3B6m0kVhD3wdj7+R3qePeuhFhAGUCczlbMqg47L2Vca
6u7ieInamPBA0G+fTk486T96qK26XUumVwdbrs5fNrWCCQlD9O5kV1pp2N3AQ6pi
5FdMfOWDcSdvjRIZdhm/PVFWX2PD9xbyJIrPClIGeEcz/hzx4xeRSF4fRGrCaR8G
AOJLbG1esi8SZIXer/bek0iSlrBCUDjcqFVRg3nFMrc85abO7ZDTHbDYxFbEAG+J
d1UXb/y4PJCOgK3LTRFprW0U9qPnyrrtHL+zsMCWX4nESeoqkwBsW3XBH/reer3H
ZOGEk7KJOHxZWQGxl+dP+s3kGCjxBCtWbraceFlqbYVwqUG3zZc/M/0g6oNxRuCJ
S66oUq/5XnPZUoTvYDoblKFdlKt6ycNjENu2fDzOgsf6c+qNq+ZlT1CAcwR4NGW6
lZ3V29+Ccz/ECztfEwpbZdQFl5aCzMmZD5l3/K8HKFltyxQmtwS7K1cHVzxwMvSC
VnV87op6EMpUHZ8895KDmZccb25O+B6pW2VEERCUIxC+O6Vb6M0ppUsfJnOd3Qut
77NHYKkgFHCjetzPRX4zHuntpSKPZ4Ax5wexfm7tIbOqCI1VImEzVYdlO4chPA3c
eREz4A4oeGs3zoJcJe7gVHOWisinYQIDAQABAoICAQCFVksJH/Mr7j1s9e0P4Qcs
93rZdVP07PKFYJfNYJEXJp5eCmBZ7bHA3Lg4nQaGZVBcTuwfDPDfzJUzCZpwYBhA
cuFyU8gD7ADf+QZLT/wb5WRQVBzRreptcSGkceM1MUojXK89moWZ+XddbO9bXR7F
vzgaxhsaU9SBOHGyoypCmdWUnY1H3K8Msnqc8e2g3RNXIGDkac9Ewlt+KbFHdZcH
dnh194NGXpUf44LTVERfDNTGEJfwlIPJcdk7agGfIxEB5PoxqjU5GcltwapoiShJ
eibMClKOFxxHQVdxJ33nyI2/XIJMBwC5Qz/AyaBGmDa79oCOwYbyj4dUvkRPwKlc
uV8aG9GZVIM6S+fTs0y4qKp8agLaNiGot3LinGzN/8eOwzKFeHBVTeSqjmrXETvF
C37M4KdoKGqYcWMzJ5636jgOdNs9ahkiov6XF4MKZekrVgP3JRjBqv+gHBvdIfGy
XnvGKDNvcW3pbRJxILz+gvFpVqqQH5gEyOmdHiCUfA3aDAPfKoLVIM7taGFeGNPd
pW5nHVbDPx6aIR4TTMiokBMHGcXzlgNog4T+e5iF/4r1OkFr5SaUz07NVjn+YU89
ktqI5dC0XhUoJ+KFDvOw0XibRU3YJTZXuOl5Y0/YJm3yIxQqk0J/odrzPYa6pyRf
mAeQ46h859+TJtI+9dNGQQKCAQEA2EI1aP/bTDBtXR5O5vRS6MdcNlx/i0Cg42Jr
13P4dttbF0p2o685gel+ukXO/Qj7bjLxihM+aQbavOhvyl/r0FmwZgWG9GiSOTLj
kbxc12mYIuv2M0zIfInB60TRfycbiHrL5VkMdFWrZiYGO/DLGAnrZ8FeZv8Ccaio
wYDV4figkPN7VHslxSrNGQpb+Nyuzjfga2EVI5ueXzeXFH45iWaFCQTcmDRMc2Ui
CrjbwPJY9Gn/JpY2+NmFqUkbNuc2KI+HnvFI1u2yuAlSF5E/HPbmCvbIzhbUTU/A
ibqBU/vbxL68oNYjnexJJ5tQ6hY/c+2XuZCp64DDFwhaYYMwTQKCAQEA1VI3ZFIN
19fVdveoI3+amCHrCNJfWsy69o2QUkLDr5CA6Vsh0ymKvztfhqzAxncAmmSiGaMU
Uk4Wm+Zu0hPP95Nr24tbRxei/9CLJFl4Y9+ZzOJ/AlTNc7q3itdqiYlaGSF6oR0i
mHgb9CEi4YRmLJD8x7stG0BJdx2zcsq72Wf47tM9Cso/BxM5quUWOIDi7Nu+6nz/
D/1vYExH/t5RO01GD/VbA2nly0Mc+tlGnKBGbqn6OplU9AO3x6y6z7TekhGSyZps
vTIY5wrxJzBjartnHIevC3NKZRkVNAViT+UIagBFkbCdzvtj7e0cjsvjYJCVW8i0
kf/TbHsl0bV9ZQKCAQEAl2UCbxdvNs9QQLhPFHBG+p9WdtgakioUeBsW1CZj8xFt
m8iNddndsIz+IvlsBsia/HK9laQTNQOPbmBqooq0U4/2ZfXInKH4fAKcPhJYDJXn
48q8+Pzv/f+SulnbL+D47XrJ8y18ApVXAJPuGVhhVdrb6i79H6220Er6mTzQfvnH
rrJFzMbJklZ8buNJr9cOqV+ExKeaXOs82/vW0IntTbtvtvioVgWG3+IVCtyPO2xt
ye3KqgDPSzc8015SpwUGbS7OCv9vtseBLkWYKteMD4LpWRObUGu7BMSoTcM7dsgC
+qFs/Evtc0lPjWK2KqqYkVfruAUGb9Acw6sdWta0oQKCAQEAyNadPCBc1Chq25UT
gkhzPmRAqo+WIyC5rcNea3RcVIDSPeIFGI/2B1FZAKzI2pHTyYiRbV2ylkLa2nC7
SaJJnKf5Vjv/9hD077BiMBjkVfOBE/ry5Tj+LcVPZLKnpVHht+NjVyjdF3uNpe1E
r9o9cBwZQdqh/xQplrIp7xucfHV9Uy0iPXRonrqlApaosw31mFbTimWgpmdPYvSu
m/CnvhNksUWpKK+dIB/RuwKxjmj/ptT1uBIAf7S4ZI/lWgTJv/A3qQNw+TefZndQ
0DqofyZtT9kXHsqu8jwJUG75Pos9vr7+wMnt6Z+ZV7pztqWTL6kwVbfC+epIHcxb
sPMUWQKCAQBsrXQxsIJuLoxW+VbxJbwEnoqFeHSLpPGAH8Q1iAi8woLJIPHv5oYu
EQAr5yPBfGIfR+wVoU2WP0DSKoctS80VEFhKNfkhEyRMQZITynhu/Yc2U27I2mb7
3OcuZKdD4x3WlGZi8AZvQZwvRebmUs6F/2/Itoat8UTDtQx43Iar65/dvjkY28vh
nnWrkyJP0hIGIT4t4ZM2vG8+OQbJCSq5aXv8zwCW/CoiBk0C+5nLCpkPAs/eIATf
IHYu8t5CrjtBLzfzbannWbRPeskRQp3X4GvRKDOIVcmn2X9nvbA+dS2E+cYxRpmp
V20NPv6LYUshyYwOo3z25EX57WbuMnuK
-----END PRIVATE KEY-----
Binary file added azure-keyvault-emulator.pfx
Binary file not shown.
8 changes: 4 additions & 4 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
version: '3.9'

services:
key-vault-emulator:
container_name: key-vault-emulator
keyvault-emulator:
image: azure-keyvault-emulator:latest
build:
context: .
hostname: azure-keyvault-emulator.vault.azure.net
ports:
- 5551:5551
- 5550:5550
Expand All @@ -14,5 +14,5 @@ services:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:5551
- ASPNETCORE_Kestrel__Certificates__Default__KeyPath=/https/azure-key-vault-emulator.key
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/azure-key-vault-emulator.crt
- ASPNETCORE_Kestrel__Certificates__Default__KeyPath=/https/azure-keyvault-emulator.key
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/azure-keyvault-emulator.crt
29 changes: 0 additions & 29 deletions local-certs/azure-key-vault-emulator.crt

This file was deleted.

52 changes: 0 additions & 52 deletions local-certs/azure-key-vault-emulator.key

This file was deleted.

30 changes: 30 additions & 0 deletions local-certs/azure-keyvault-emulator.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFPDCCAySgAwIBAgIJAN6yZUBL6I4XMA0GCSqGSIb3DQEBCwUAMCIxIDAeBgNV
BAMMF2F6dXJlLWtleXZhdWx0LWVtdWxhdG9yMB4XDTIyMTAwNDEzMzMyMloXDTMy
MDcwMzEzMzMyMlowIjEgMB4GA1UEAwwXYXp1cmUta2V5dmF1bHQtZW11bGF0b3Iw
ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC0NIpwcSq9bQiciTprOLGf
6TwqvdPAO1XlB3B6m0kVhD3wdj7+R3qePeuhFhAGUCczlbMqg47L2Vca6u7ieIna
mPBA0G+fTk486T96qK26XUumVwdbrs5fNrWCCQlD9O5kV1pp2N3AQ6pi5FdMfOWD
cSdvjRIZdhm/PVFWX2PD9xbyJIrPClIGeEcz/hzx4xeRSF4fRGrCaR8GAOJLbG1e
si8SZIXer/bek0iSlrBCUDjcqFVRg3nFMrc85abO7ZDTHbDYxFbEAG+Jd1UXb/y4
PJCOgK3LTRFprW0U9qPnyrrtHL+zsMCWX4nESeoqkwBsW3XBH/reer3HZOGEk7KJ
OHxZWQGxl+dP+s3kGCjxBCtWbraceFlqbYVwqUG3zZc/M/0g6oNxRuCJS66oUq/5
XnPZUoTvYDoblKFdlKt6ycNjENu2fDzOgsf6c+qNq+ZlT1CAcwR4NGW6lZ3V29+C
cz/ECztfEwpbZdQFl5aCzMmZD5l3/K8HKFltyxQmtwS7K1cHVzxwMvSCVnV87op6
EMpUHZ8895KDmZccb25O+B6pW2VEERCUIxC+O6Vb6M0ppUsfJnOd3Qut77NHYKkg
FHCjetzPRX4zHuntpSKPZ4Ax5wexfm7tIbOqCI1VImEzVYdlO4chPA3ceREz4A4o
eGs3zoJcJe7gVHOWisinYQIDAQABo3UwczBxBgNVHREEajBogglsb2NhbGhvc3SC
F2F6dXJlLWtleXZhdWx0LWVtdWxhdG9yghlsb2NhbGhvc3QudmF1bHQuYXp1cmUu
bmV0gidhenVyZS1rZXl2YXVsdC1lbXVsYXRvci52YXVsdC5henVyZS5uZXQwDQYJ
KoZIhvcNAQELBQADggIBAC4tiVEKxmFUPRTsdejW8hETf2RLs2XZYLx7Nz0fPiJD
xUi2Y39R3yHOrcxxOGMgEIg1HiuVALqWVfwTWhlFkChNDNIjknpMNvK1SONWpYcx
6RXg41M9N5myAdxrD5lrjsJ5/FlxYMPp5ONJ2g8Iu4iPpuHu6kpBnMLAXDsnsPzh
fHgswJesE3AJlfEJi4Zftv0BPs3cpfrPYaAHCz9kHBsipKbKYc112wwArcqUh9T6
BBu8yDjCmKxcrmo8JhSUu4qjBD+YjLyP5TjBIVF84cDHbw4OTFh0QWk5nntQg3sB
2vO5KJpcIIjQYMBrHalipj/tKZAVk3KT64QSBECCf+rxH8zDphED/fOmo55K3v0S
Jrewsdxmuo7KBWzklZ9gzbIdow7/fen90QUl1v33C9cXIS5DfodstOsm10H4k34A
pL05Uz1YYxtAT0ezPmwRKTC9bJ5C4INR+m++4YOtZwwXIXKM35mb6PTGhx8l4J/N
yIzrK/kCbPMPxoH2qjvDuPPeNedccQS6ONaV5NLKE6CBmYIumqgKwEf/n6v/Ns62
ka1ym8G5rIFwriE1vOj2GVOlnsh6jsKwfRq8WL+Xom1lCTsXORBS+zc3KT/gy74Q
Dkm/ftCTgP+KQA5Of9P+wLmZSUuqGCUhFuDfna8vwBcRBeVYifqcmeu1nj7ejLzf
-----END CERTIFICATE-----
Loading

0 comments on commit edc500b

Please sign in to comment.