Certificate rotation Azure Service Fabric Standalone cluster

Published 01-03-2021 11:37 PM 904 Views
Microsoft

To keep Service Fabric cluster running the old certificate are needed to be replaced with new certificates the below steps can help you rotate the old certificate with new certificates. This article assumes you are running cluster with thumbprint approach. In general the common name approach is recommended for easy certificate management. More information about certificate on Standalone cluster refer to Secure a cluster on Windows by using certificates - Azure Service Fabric | Microsoft Docs

Service Fabric with certificates that aren't expired (cluster running with near expiry or non-expired certificates) 

Important Note: Before you change below config, you should install all certificate on all nodes i.e. New certificate should be present and acled to Network Service before you start this operation on all nodes.

 

1. Open the Clusterconfig.json file for editing, and find the following section. If a secondary thumbprint is defined, you need to clean up old Service Fabric certificates before you go any further. i.e. trigger an upgrade to remove secondary certificate section first.  

 

"security": {
    "metadata":  "The Credential type X509 indicates this cluster is secured using X509 Certificates. 
    The thumbprint format is - d5 ec 42 3b 79 cb e5 07 fd 83 59 3c 56 b9 d5 31 24 25 42 64.",
    "ClusterCredentialType":  "X509",
    "ServerCredentialType":  "X509",
    "CertificateInformation":  {
        "ClusterCertificate":  {
                                   "X509StoreName":  "My",
                                    "Thumbprint": "*Old server thumbprint(Star/SF)*"
                               },
        "ServerCertificate":   {
                                    "X509StoreName":  "My",
 									"Thumbprint": "*Old server thumbprint(Star/SF)*"
                               },
        "ClientCertificateThumbprints":  [
                                   {
                                        "CertificateThumbprint": "*Old client thumbprint*",
                                        "IsAdmin":  true
                                   }
                                         ]
                               }
            },

 

     

2.  Replace that section in the file with following section.

 

 

"security":  {
    "metadata":  "The Credential type X509 indicates this cluster is secured using X509 Certificates. 
    The thumbprint format is - d5 ec 42 3b 79 cb e5 07 fd 83 59 3c 56 b9 d5 31 24 25 42 64.",
    "ClusterCredentialType":  "X509",
    "ServerCredentialType":  "X509",
    "CertificateInformation":  {
        "ClusterCertificate":  {
                                   "X509StoreName":  "My",
                                    "Thumbprint": "*New server thumbprint(Star/SF)*",
                                    "ThumbprintSecondary": "Old server thumbprint(Star/SF)"
                               },
        "ServerCertificate":   {
                                    "X509StoreName":  "My",
 									"Thumbprint": "*New server thumbprint(Star/SF)*",
                                    "ThumbprintSecondary": "Old server thumbprint(Star/SF)"
                               },
        "ClientCertificateThumbprints":  [
                                   {
                                        "CertificateThumbprint": "*Old client thumbprint*",
                                        "IsAdmin":  false
                                   },
                                   {
                                        "CertificateThumbprint": "*New client thumbprint*",
                                        "IsAdmin":  true
                                   }
                                         ]
                               }
            },

 

 

3. Edit the new and old thumbprint values.
4. Change clusterConfigurationVersion to the new version, for example 2.0.0.
{
"name": "myclustername",
"clusterConfigurationVersion": "2.0.0",

5. Save the new ClusterConfig.json file.

6. Run the following PowerShell command. 

# Connect to the Service Fabric cluster
Connect-ServiceFabricCluster

# Get path of ClusterConfig.json for following command
# Note that after running the following command, you need to manually cancel using the red button (Stop Operation) in Windows PowerShell ISE or Ctrl+C in Windows PowerShell, otherwise you will receive the following notification, "Start-ServiceFabricClusterConfigurationUpgrade : Operation timed out.". Be aware that the upgrade will proceed.
Start-ServiceFabricClusterConfigurationUpgrade -ClusterConfigPath ClusterConfig.json

# To monitor the status of the upgrade, run the following 
Get-ServiceFabricClusterUpgrade

 
Clean up steps: 

Once above upgrade have been completed you have to trigger another upgrade to remove the old thumbprint which is secondary now. Post this cluster is ready to use. Remove the old/secondary thumbprints from the cluster configuration. After you've removed them, the appropriate section should resemble the following example.

rototatefinal.PNG

 

%3CLINGO-SUB%20id%3D%22lingo-sub-2028360%22%20slang%3D%22en-US%22%3ECertificate%20rotation%20Azure%20Service%20Fabric%20Standalone%20cluster%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2028360%22%20slang%3D%22en-US%22%3E%3CH3%20class%3D%22heading-anchor%22%20id%3D%22toc-hId-1942512554%22%20id%3D%22toc-hId-1942512522%22%3E%3CFONT%20size%3D%224%22%20color%3D%22%23333333%22%3ETo%20keep%20Service%20Fabric%20cluster%20running%20the%20old%20certificate%20are%20needed%20to%20be%20replaced%20with%20new%20certificates%20the%20below%20steps%20can%20help%20you%20rotate%20the%20old%20certificate%20with%20new%20certificates.%20This%20article%20assumes%20you%20are%20running%20cluster%20with%20thumbprint%20approach.%20In%20general%20the%20common%20name%20approach%20is%20recommended%20for%20easy%20certificate%20management.%20More%20information%20about%20certificate%20on%20Standalone%20cluster%20refer%20to%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fservice-fabric%2Fservice-fabric-windows-cluster-x509-security%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3ESecure%20a%20cluster%20on%20Windows%20by%20using%20certificates%20-%20Azure%20Service%20Fabric%20%7C%20Microsoft%20Docs%3C%2FA%3E%3C%2FFONT%3E%3C%2FH3%3E%0A%3CH3%20id%3D%22sfcertrotationnotexpired%22%20class%3D%22heading-anchor%22%20id%3D%22toc-hId-135058091%22%20id%3D%22toc-hId-135058059%22%3EService%20Fabric%20with%20certificates%20that%20aren't%20expired%20(cluster%20running%20with%20near%20expiry%20or%20non-expired%20certificates)%26nbsp%3B%3C%2FH3%3E%0A%3CP%3EImportant%20Note%3A%26nbsp%3BBefore%20you%20change%20below%20config%2C%20you%20should%20install%20all%20certificate%20on%20all%20nodes%20i.e.%20New%20certificate%20should%20be%20present%20and%20acled%20to%20Network%20Service%20before%20you%20start%20this%20operation%20on%20all%20nodes.%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%3CSPAN%3E1.%20Open%20the%26nbsp%3B%3C%2FSPAN%3E%3CSTRONG%3EClusterconfig.json%3C%2FSTRONG%3E%3CSPAN%3E%26nbsp%3Bfile%20for%20editing%2C%20and%20find%20the%20following%20section.%26nbsp%3B%3C%2FSPAN%3EIf%20a%20secondary%20thumbprint%20is%20defined%2C%20you%20need%20to%20clean%20up%20old%20Service%20Fabric%20certificates%20before%20you%20go%20any%20further.%20i.e.%20trigger%20an%20upgrade%20to%20remove%20secondary%20certificate%20section%20first.%26nbsp%3B%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-json%22%3E%3CCODE%3E%22security%22%3A%20%7B%0A%20%20%20%20%22metadata%22%3A%20%20%22The%20Credential%20type%20X509%20indicates%20this%20cluster%20is%20secured%20using%20X509%20Certificates.%20%0A%20%20%20%20The%20thumbprint%20format%20is%20-%20d5%20ec%2042%203b%2079%20cb%20e5%2007%20fd%2083%2059%203c%2056%20b9%20d5%2031%2024%2025%2042%2064.%22%2C%0A%20%20%20%20%22ClusterCredentialType%22%3A%20%20%22X509%22%2C%0A%20%20%20%20%22ServerCredentialType%22%3A%20%20%22X509%22%2C%0A%20%20%20%20%22CertificateInformation%22%3A%20%20%7B%0A%20%20%20%20%20%20%20%20%22ClusterCertificate%22%3A%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22X509StoreName%22%3A%20%20%22My%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Thumbprint%22%3A%20%22*Old%20server%20thumbprint(Star%2FSF)*%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22ServerCertificate%22%3A%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22X509StoreName%22%3A%20%20%22My%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22Thumbprint%22%3A%20%22*Old%20server%20thumbprint(Star%2FSF)*%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22ClientCertificateThumbprints%22%3A%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22CertificateThumbprint%22%3A%20%22*Old%20client%20thumbprint*%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22IsAdmin%22%3A%20%20true%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%3C%2FP%3E%0A%3CP%3E2.%26nbsp%3B%26nbsp%3BReplace%20that%20section%20in%20the%20file%20with%20following%20section.%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-json%22%3E%3CCODE%3E%22security%22%3A%20%20%7B%0A%20%20%20%20%22metadata%22%3A%20%20%22The%20Credential%20type%20X509%20indicates%20this%20cluster%20is%20secured%20using%20X509%20Certificates.%20%0A%20%20%20%20The%20thumbprint%20format%20is%20-%20d5%20ec%2042%203b%2079%20cb%20e5%2007%20fd%2083%2059%203c%2056%20b9%20d5%2031%2024%2025%2042%2064.%22%2C%0A%20%20%20%20%22ClusterCredentialType%22%3A%20%20%22X509%22%2C%0A%20%20%20%20%22ServerCredentialType%22%3A%20%20%22X509%22%2C%0A%20%20%20%20%22CertificateInformation%22%3A%20%20%7B%0A%20%20%20%20%20%20%20%20%22ClusterCertificate%22%3A%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22X509StoreName%22%3A%20%20%22My%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Thumbprint%22%3A%20%22*New%20server%20thumbprint(Star%2FSF)*%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22ThumbprintSecondary%22%3A%20%22Old%20server%20thumbprint(Star%2FSF)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22ServerCertificate%22%3A%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22X509StoreName%22%3A%20%20%22My%22%2C%0A%20%20%20%20%20%20%20%20%20%20%22Thumbprint%22%3A%20%22*New%20server%20thumbprint(Star%2FSF)*%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22ThumbprintSecondary%22%3A%20%22Old%20server%20thumbprint(Star%2FSF)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22ClientCertificateThumbprints%22%3A%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22CertificateThumbprint%22%3A%20%22*Old%20client%20thumbprint*%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22IsAdmin%22%3A%20%20false%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22CertificateThumbprint%22%3A%20%22*New%20client%20thumbprint*%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22IsAdmin%22%3A%20%20true%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CDIV%20id%3D%22code-try-7%22%20class%3D%22codeHeader%22%20data-bi-name%3D%22code-header%22%3E%3CSPAN%3E3.%20Edit%20the%20new%20and%20old%20thumbprint%20values.%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%20class%3D%22codeHeader%22%20data-bi-name%3D%22code-header%22%3E%3CSPAN%3E4.%26nbsp%3BChange%20clusterConfigurationVersion%20to%20the%20new%20version%2C%20for%20example%202.0.0.%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%20class%3D%22codeHeader%22%20data-bi-name%3D%22code-header%22%3E%3CPRE%20class%3D%22lia-code-sample%20language-json%22%3E%3CCODE%3E%7B%0A%22name%22%3A%20%22myclustername%22%2C%0A%22clusterConfigurationVersion%22%3A%20%222.0.0%22%2C%0A%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E5.%26nbsp%3BSave%20the%20new%20ClusterConfig.json%20file.%3C%2FP%3E%0A%3CP%3E6.%20Run%20the%20following%20PowerShell%20command.%26nbsp%3B%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-powershell%22%3E%3CCODE%3E%23%20Connect%20to%20the%20Service%20Fabric%20cluster%0AConnect-ServiceFabricCluster%0A%0A%23%20Get%20path%20of%20ClusterConfig.json%20for%20following%20command%0A%23%20Note%20that%20after%20running%20the%20following%20command%2C%20you%20need%20to%20manually%20cancel%20using%20the%20red%20button%20(Stop%20Operation)%20in%20Windows%20PowerShell%20ISE%20or%20Ctrl%2BC%20in%20Windows%20PowerShell%2C%20otherwise%20you%20will%20receive%20the%20following%20notification%2C%20%22Start-ServiceFabricClusterConfigurationUpgrade%20%3A%20Operation%20timed%20out.%22.%20Be%20aware%20that%20the%20upgrade%20will%20proceed.%0AStart-ServiceFabricClusterConfigurationUpgrade%20-ClusterConfigPath%20ClusterConfig.json%0A%0A%23%20To%20monitor%20the%20status%20of%20the%20upgrade%2C%20run%20the%20following%20%0AGet-ServiceFabricClusterUpgrade%0A%0A%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CDIV%20id%3D%22code-try-9%22%20class%3D%22codeHeader%22%20data-bi-name%3D%22code-header%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%20class%3D%22codeHeader%22%20data-bi-name%3D%22code-header%22%3E%3CSTRONG%3EClean%20up%20steps%3A%26nbsp%3B%3C%2FSTRONG%3E%3C%2FDIV%3E%0A%3CDIV%20class%3D%22codeHeader%22%20data-bi-name%3D%22code-header%22%3E%0A%3CP%3EOnce%20above%20upgrade%20have%20been%20completed%20you%20have%20to%20trigger%20another%20upgrade%20to%20remove%20the%20old%20thumbprint%20which%20is%20secondary%20now.%20Post%20this%20cluster%20is%20ready%20to%20use.%20Remove%20the%20old%2Fsecondary%20thumbprints%20from%20the%20cluster%20configuration.%20After%20you've%20removed%20them%2C%20the%20appropriate%20section%20should%20resemble%20the%20following%20example.%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-center%22%20image-alt%3D%22rototatefinal.PNG%22%20style%3D%22width%3A%20760px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F243768i0ED817FC15B784BD%2Fimage-size%2Flarge%3Fv%3D1.0%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22rototatefinal.PNG%22%20alt%3D%22rototatefinal.PNG%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-TEASER%20id%3D%22lingo-teaser-2028360%22%20slang%3D%22en-US%22%3E%3CP%3E%3CSTRONG%3ECertificate%20rotation%20Azure%20Service%20Fabric%20Standalone%20cluster%3C%2FSTRONG%3E%3C%2FP%3E%3C%2FLINGO-TEASER%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2028360%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EAzure%20Service%20Fabric%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Version history
Last update:
‎Jan 03 2021 11:37 PM
Updated by: