Is it acceptable to store a client cert's private key as exportable in the computer's certificate store?
I have a .NET desktop app that installs client certificates in local machine\personal. The certificates are generated by a protected API. The certs are used to authenticate service calls by another .NET desktop application.
If the private keys are not marked as exportable, then the second desktop application is not able to access them unless the account that it is run under is given access permissions, or the application is run as an administrator. If access permissions were to be granted, this would need to be done programmatically and probably without additional user interactions. This would be complicated by the fact that the cert installer application runs with elevated privileges which mean it is ignorant of the user's account - so it doesn't know what account would need to be assigned the permissions.
If the private keys are marked as exportable then they could be protected with a password. Then the application that makes use of the certs would need to use the password to access them. However this would be a paradoxical solution because the client application has no way to authenticate itself to access the private key - until it can access the private key.
If it is not acceptable to store certificate with an exportable private key, then how could you avoid it in the scenario I've described? If it is, then how would you detect or protect against the certificate theft?