the fact that the manual upload works proves your certificate and service principal are configured correctly. the issue is specifically with how adf retrieves and uses the certificate from key vault.
the most common culprit here is the certificate's content type. when you upload a pfx to key vault, it is stored as a secret. azure key vault expects the pfx bytes to be base64 encoded. however, sometimes the encoding or the metadata is not exactly what adf expects when it pulls the secret.
check how the certificate is stored in key vault. go to your key vault in the azure portal, find the secret for your certificate, and check its content type. it should be application/x-pkcs12. if it is something else, like just application/octet-stream, that could be the problem.
next, try to re upload the pfx to key vault, but this time, use the azure cli or powershell to ensure it is stored correctly. you can use this powershell command.
az keyvault secret set --vault-name "your-kv-name" --name "your-cert-name" --file "path-to-your-cert.pfx" --content-type "application/x-pkcs12"
the --content-type flag is key. this explicitly tells key vault that this secret is a pfx certificate.
after re uploading it with the correct content type, go back to your adf linked service and test the connection again. this often resolves the parsing issue on the adf side.
if that does not work, there is a known workaround. instead of pointing the linked service directly to the key vault, you can use an adf web activity to fetch the certificate from key vault, decode it, and then pass it to a subsequent activity. but that is much more complex.
the issue is likely the content type of the secret in key vault. re upload your pfx certificate using the azure cli or powershell and explicitly set the content type to application/x-pkcs12.
rgds,
Alex