Skip to content

Commit b313b07

Browse files
author
Lee Fine
committed
1 parent d129ac2 commit b313b07

File tree

4 files changed

+44
-5
lines changed

4 files changed

+44
-5
lines changed

RemoteFile/ManagementBase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public JobResult ProcessJob(ManagementJobConfiguration config)
5454
}
5555
certificateStore.LoadCertificateStore(certificateStoreSerializer, false);
5656
certificateStore.AddCertificate(config.JobCertificate.Alias ?? GetThumbprint(config.JobCertificate, logger), config.JobCertificate.Contents, config.Overwrite, config.JobCertificate.PrivateKeyPassword, RemoveRootCertificate);
57-
certificateStore.SaveCertificateStore(certificateStoreSerializer.SerializeRemoteCertificateStore(certificateStore.GetCertificateStore(), storePathFile.Path, storePathFile.File, StorePassword, certificateStore.RemoteHandler));
57+
certificateStore.SaveCertificateStore(certificateStoreSerializer.SerializeRemoteCertificateStore(certificateStore.GetCertificateStore(RequiresLegacyEncryption), storePathFile.Path, storePathFile.File, StorePassword, certificateStore.RemoteHandler));
5858

5959
try
6060
{
@@ -83,7 +83,7 @@ public JobResult ProcessJob(ManagementJobConfiguration config)
8383
{
8484
certificateStore.LoadCertificateStore(certificateStoreSerializer, false);
8585
certificateStore.DeleteCertificateByAlias(config.JobCertificate.Alias);
86-
certificateStore.SaveCertificateStore(certificateStoreSerializer.SerializeRemoteCertificateStore(certificateStore.GetCertificateStore(), storePathFile.Path, storePathFile.File, StorePassword, certificateStore.RemoteHandler));
86+
certificateStore.SaveCertificateStore(certificateStoreSerializer.SerializeRemoteCertificateStore(certificateStore.GetCertificateStore(RequiresLegacyEncryption), storePathFile.Path, storePathFile.File, StorePassword, certificateStore.RemoteHandler));
8787
}
8888
logger.LogDebug($"END Delete Operation for {config.CertificateStoreDetails.StorePath} on {config.CertificateStoreDetails.ClientMachine}.");
8989
break;

RemoteFile/ReenrollmentBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public JobResult ProcessJob(ReenrollmentJobConfiguration config, SubmitReenrollm
102102

103103
// save certificate
104104
certificateStore.AddCertificate(config.Alias ?? cert.Thumbprint, Convert.ToBase64String(cert.Export(X509ContentType.Pfx)), config.Overwrite, null, RemoveRootCertificate);
105-
certificateStore.SaveCertificateStore(certificateStoreSerializer.SerializeRemoteCertificateStore(certificateStore.GetCertificateStore(), storePathFile.Path, storePathFile.File, StorePassword, certificateStore.RemoteHandler));
105+
certificateStore.SaveCertificateStore(certificateStoreSerializer.SerializeRemoteCertificateStore(certificateStore.GetCertificateStore(RequiresLegacyEncryption), storePathFile.Path, storePathFile.File, StorePassword, certificateStore.RemoteHandler));
106106

107107
try
108108
{

RemoteFile/RemoteCertificateStore.cs

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
using Keyfactor.PKI.PrivateKeys;
2828
using Keyfactor.PKI.CryptographicObjects.Formatters;
2929
using Org.BouncyCastle.X509;
30+
using Org.BouncyCastle.Asn1.Pkcs;
3031

3132
namespace Keyfactor.Extensions.Orchestrator.RemoteFile
3233
{
@@ -112,17 +113,50 @@ internal void LoadCertificateStore(ICertificateStoreSerializer certificateStoreS
112113
{
113114
logger.MethodEntry(LogLevel.Debug);
114115

116+
Pkcs12StoreBuilder storeBuilder = new Pkcs12StoreBuilder();
117+
CertificateStore = storeBuilder.Build();
118+
115119
byte[] byteContents = RemoteHandler.DownloadCertificateFile(StorePath + StoreFileName);
116-
Pkcs12Store CertificateStore = certificateStoreSerializer.DeserializeRemoteCertificateStore(byteContents, StorePath, StorePassword, RemoteHandler, isInventory);
120+
if (byteContents.Length < 5)
121+
return;
122+
123+
CertificateStore = certificateStoreSerializer.DeserializeRemoteCertificateStore(byteContents, StorePath, StorePassword, RemoteHandler, isInventory);
117124

118125
logger.MethodExit(LogLevel.Debug);
119126
}
120127

121-
internal Pkcs12Store GetCertificateStore()
128+
internal Pkcs12Store GetCertificateStore(bool requiresLegacyEncryption)
122129
{
123130
logger.MethodEntry(LogLevel.Debug);
124131
logger.MethodExit(LogLevel.Debug);
125132

133+
if (requiresLegacyEncryption)
134+
{
135+
Pkcs12StoreBuilder builder = new Pkcs12StoreBuilder();
136+
builder.SetKeyAlgorithm(PkcsObjectIdentifiers.PbeWithShaAnd3KeyTripleDesCbc);
137+
builder.SetCertAlgorithm(PkcsObjectIdentifiers.PbewithShaAnd40BitRC2Cbc);
138+
139+
Pkcs12Store tempStore = builder.Build();
140+
141+
foreach (string alias in CertificateStore.Aliases)
142+
{
143+
if (CertificateStore.IsKeyEntry(alias))
144+
{
145+
var keyEntry = CertificateStore.GetKey(alias);
146+
var certChain = CertificateStore.GetCertificateChain(alias);
147+
148+
tempStore.SetKeyEntry(alias, keyEntry, certChain);
149+
}
150+
else if (CertificateStore.IsCertificateEntry(alias))
151+
{
152+
var certEntry = CertificateStore.GetCertificate(alias);
153+
tempStore.SetCertificateEntry(alias, certEntry);
154+
}
155+
}
156+
157+
CertificateStore = tempStore;
158+
}
159+
126160
return CertificateStore;
127161
}
128162

RemoteFile/RemoteFileJobTypeBase.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public abstract class RemoteFileJobTypeBase
3030
internal bool CreateCSROnDevice { get; set; }
3131
internal bool UseShellCommands { get; set; }
3232
internal string PostJobApplicationRestart { get; set; }
33+
internal bool RequiresLegacyEncryption { get; set; }
3334
internal string KeyType { get; set; }
3435
internal int KeySize { get; set; }
3536
internal string SubjectText { get; set; }
@@ -78,6 +79,10 @@ internal void SetJobProperties(JobConfiguration config, CertificateStore certifi
7879
null :
7980
properties.PostJobApplicationRestart;
8081

82+
RequiresLegacyEncryption = properties.RequiresLegacyEncryption == null || string.IsNullOrEmpty(properties.RequiresLegacyEncryption.Value) ?
83+
false :
84+
properties.RequiresLegacyEncryption;
85+
8186
if (config.JobProperties != null)
8287
{
8388
KeyType = !config.JobProperties.ContainsKey("keyType") || config.JobProperties["keyType"] == null || string.IsNullOrEmpty(config.JobProperties["keyType"].ToString()) ? string.Empty : config.JobProperties["keyType"].ToString();

0 commit comments

Comments
 (0)