In order to use a certificates for Service Fabric cluster issues by custom, non publicly trusted CA you’d need to supply a list of thumbprints of intermediate CAs. In a form of a comma-separated string. What means if you have an array of thumbprints (what’s natural as it’s an easier way to maintain the list) like this:
"clusterCertIssuers": [
"417E225037FBFAA4F95761D5AE729E1AEA7E3A42", // Microsoft IT TLS CA 1
"54D9D20239080C32316ED9FF980A48988F4ADF2D", // Microsoft IT TLS CA 2
"8A38755D0996823FE8FA3116A277CE446EAC4E99", // Microsoft IT TLS CA 4
"AD898AC73DF333EB60AC1F5FC6C4B2219DDB79B7", // Microsoft IT TLS CA 5
]
Then you would need to convert them to a string like this:
"certificateCommonNames": {
"commonNames": [
{
"certificateCommonName": "[variables('clusterCertSubjectName')]",
"certificateIssuerThumbprint": "417E225037FBFAA4F95761D5AE729E1AEA7E3A42,54D9D20239080C32316ED9FF980A48988F4ADF2D,8A38755D0996823FE8FA3116A277CE446EAC4E99,AD898AC73DF333EB60AC1F5FC6C4B2219DDB79B7"
}
],
"x509StoreName": "[variables('certificateStoreName')]"
}
What obviously nobody wants to do. If only ARM supported a join(string, array)
function! Here’s a UserVoice post dated back to May 2017. As of date of writing, there is no such string function whatsoever.
Here’s a solution, hopefully temporal, until ARM comes up with a proper one:
"clusterCertIssuersArr": {
"copy": [
{
"name": "certsLoop",
"count": "[length(variables('clusterCertIssuers'))]",
"input": "[concat(variables('clusterCertIssuers')[copyIndex('certsLoop')], ',')]"
}
]
},
"clusterCertIssuersStr": "[replace(replace(replace(string(variables('clusterCertIssuersArr').certsLoop), '[\"', ''), '\"]', ''), '\",\"', '')]",
"clusterCertIssuersSubstr": "[substring(variables('clusterCertIssuersStr'), 0, sub(length(variables('clusterCertIssuersStr')), 1))]",
It does 3 things:
- Creates a temporal array where each element of the initial array is appended by comma
- Converts the temporal array into a string and replaces all JSON array artifacts with empty string (effectively removes them), means
["a","b"]
becomes justa,b
- Drop the last comma
That’s it, folks. Happy deployments!