Я создаю Приложение, которое аутентифицирует личность пользователя и создает подписанный токен SAML, который он предоставляет Стороннему клиентскому приложению, которое является потребителем Услуг, предоставляемых моим Приложением.
Пользователь передается в мое приложение, где он идентифицирует себя по имени пользователя / паролю. Затем мой код должен предоставить данные пользователя в качестве полезной нагрузки токена SAML, которую я затем передаю стороннему приложению.
Наконец-то я нашел решение для создания XML-документа SAML, но мне нужно подписать его сертификатом X509, прежде чем я закодирую его для создания токена SAML.
Код для подписи выглядит примерно так:
public XmlDocument SignDocument(XmlDocument xmlDocument, X509Certificate2 certificate)
{
var sig = new SignedXml(xmlDocument);
// Add the key to the SignedXml xmlDocument.
sig.SigningKey = certificate.PrivateKey;
// Create a reference to be signed.
var reference = new Reference();
reference.Uri = String.Empty;
// Add an enveloped transformation to the reference.
var env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);
// Add the reference to the SignedXml object.
sig.AddReference(reference);
// Add an RSAKeyValue KeyInfo (optional; helps recipient find key to validate).
var keyInfo = new KeyInfo();
var keyData = new KeyInfoX509Data(certificate);
keyInfo.AddClause(keyData);
sig.KeyInfo = keyInfo;
// Compute the signature.
sig.ComputeSignature();
var status = sig.CheckSignature(certificate, true);
// Get the XML representation of the signature and save it to an XmlElement object.
var xmlDigitalSignature = sig.GetXml();
xmlDocument.DocumentElement.InsertBefore(xmlDigitalSignature,
xmlDocument.DocumentElement.ChildNodes[1]);
return xmlDocument;
}
Я хочу использовать централизованное хранилище для моего сертификата X509, а затем сделать открытый ключ доступным для стороннего клиентского приложения. Я хотел бы использовать один сертификат X509 для подписи каждого SAML.
Мое основное приложение .NET будет работать в Docker Linux-контейнере на виртуальной машине AWS.
Итак, ключевые вопросы, на которые мне нужно ответить:
1) Какой магазин лучше использовать для хранения и получения моего сертификата X509
Мне нужно будет получить весь Сертификат (а не только открытую часть), поскольку для подписания SAML необходим закрытый ключ.
2) Как я могу получить доступ к хранилищу из кода и извлечь его в объект X509Certificate2, чтобы перейти к моему коду выше.
Доступны ли SDK для Магазина в вопросе 1).
Я смотрел на AWS ACM, но, похоже, он не позволяет вам полностью получить существующий сертификат из Магазина (т. Е. С закрытым ключом).
Большое спасибо.
Тим.