У меня есть код, который должен работать с информацией о сертификате X509.Я скачал пример, который делает это:
const string CertWithoutPrivateKey = "MII....";
const string CertWithPrivateKey = "MII...";
public static SecurityToken GetSigningToken(bool includePrivateKey)
{
X509Certificate2 cert = null;
if (includePrivateKey)
{
cert = new X509Certificate2(
Convert.FromBase64String(CertWithPrivateKey),
"pw", X509KeyStorageFlags.PersistKeySet);
}
else
{
cert = new X509Certificate2(
Convert.FromBase64String(CertWithoutPrivateKey));
}
return cert;
}
Код должен быть в состоянии получить сертификат с закрытым ключом.Saml2AuthenticationModule (из расширения WIF для протокола SAML 2.0) использует этот закрытый ключ для расшифровки информации, отправляемой от поставщика удостоверений SAML.
Я не знаю много о сертификатах или шифровании, но мне кажется, что жесткое кодирование сертификата в класс небезопасно.
Итак, как мой код должен извлекать сертификат с закрытым ключом? На самом деле, этот код запускается только один раз при запуске приложения (так что, вероятно, также после перезагрузки пула приложений).
Я мог бы:
- Сохранить сертификат как appSetting в файле конфигурации.Пока appSettings зашифрованы в конфигурации, это безопасно?
- Храните сертификат в базе данных.
- Сохраните сертификат в виде файла в bin / App_Data.Afaik это означает, что он не может быть прочитан через Интернет, но будет понятен любому, кто может получить доступ к хост-серверу.Мне кажется, что если кто-то может проникнуть на мой сервер, то пусть он прочитает этот сертификат, наверное, меньше всего меня беспокоит.
Есть ли другие варианты?Что наиболее уместно в этом случае?