internal static bool TryGetStepOne(
            X509 currentCerts,
            X509 targetCerts,
            CertificateClusterUpgradeStep previousStep,
            out CertificateClusterUpgradeStep step)
        {
            // step 1 adds all newly added certs and issuers (if any) to the white list
            step = null;
            List <string> currentThumbprints               = CertificateClusterUpgradeFlow.GetThumbprints(currentCerts.ClusterCertificate);
            List <string> addedThumbprints                 = CertificateClusterUpgradeFlow.GetAddedThumbprints(currentCerts.ClusterCertificate, targetCerts.ClusterCertificate);
            Dictionary <string, string> currentCns         = CertificateClusterUpgradeFlow.GetCns(currentCerts.ClusterCertificateCommonNames);
            Dictionary <string, string> addedCnsAndIssuers = CertificateClusterUpgradeFlow.GetAddedCnsAndIssuers(currentCerts.ClusterCertificateCommonNames, targetCerts.ClusterCertificateCommonNames);

            if (addedThumbprints.Any() || addedCnsAndIssuers.Any())
            {
                step = new CertificateClusterUpgradeStep(
                    thumbprintWhiteList: currentThumbprints.Concat(addedThumbprints).ToList(),
                    thumbprintLoadList: currentCerts.ClusterCertificate,
                    thumbprintFileStoreSvcList: currentCerts.ClusterCertificate,
                    commonNameWhiteList: CertificateClusterUpgradeFlow.MergeCnsAndIssuers(currentCns, addedCnsAndIssuers),
                    commonNameLoadList: currentCerts.ClusterCertificateCommonNames,
                    commonNameFileStoreSvcList: currentCerts.ClusterCertificateCommonNames);
            }

            return(true);
        }