Как создать файл .pfx?

Есть ли способ создать файлы .pfx для подписи документов, я нашел программу под названием x509 Certificate Generate, но я хочу знать, можно ли ее сгенерировать в коде с использованием С#.


person user773456    schedule 19.01.2012    source источник
comment
Что заставляет вас думать, что вам нужен файл pfx?   -  person President James K. Polk    schedule 19.01.2012
comment
Я работаю над проектом asp.net, и теперь мне нужно это, чтобы подписать документ цифровой подписью.   -  person user773456    schedule 19.01.2012
comment
Вы подписываете каждый документ одним и тем же сертификатом?   -  person Rohan West    schedule 19.01.2012
comment
Нет, это то, что мне нужно знать, как генерировать сертификаты pfx, у каждого пользователя есть свой собственный сертификат   -  person user773456    schedule 19.01.2012


Ответы (6)


Существует инструмент командной строки Microsoft makecert, который можно использовать для сертификаты. Это часть Windows SDK. На моей машине есть полдюжины версий, например. в 1_. Затем в своем коде вы можете запустить процесс для запуска исполняемого файла с соответствующими параметрами.

person David Clarke    schedule 19.01.2012

Вы можете проверить Bouncy Castle API, его можно использовать для создания сертификатов с помощью C#.

person Rohan West    schedule 19.01.2012
comment
Есть ли образец BC API? - person user773456; 19.01.2012

Во-первых, подписывать документы самоподписанными сертификатами не имеет смысла, если у вас в организации нет настраиваемой иерархии PKI (а в последнем случае нужно хорошо знать, что вы делаете, что, похоже, не так).

PFX — это контейнер для одного или нескольких сертификатов со связанными закрытыми ключами. Таким образом, вы не создаете «файл PFX». Вы генерируете пару ключей и создаете сертификат, который затем можно экспортировать в файл PFX или в другой формат.

Как упоминалось выше, BouncyCastle может генерировать сертификаты, и наша библиотека SecureBlackbox также может генерировать сертификаты, а также сохранять и загружать их в различных форматах.

person Eugene Mayevski 'Callback    schedule 19.01.2012
comment
Это имеет смысл, если вы разработчик и хотите создать и протестировать код, который будет работать с файлом .pfx. - person Gangnus; 12.08.2020
comment
@Gangnus, прежде чем комментировать, прочитайте тему. ОП не хотел ничего проверять. Он хочет подписывать документы для пользователей (прочитайте комментарии ОП к вопросу). Пожалуйста, читайте ответы в контексте вопроса, а не как какую-то абстракцию. - person Eugene Mayevski 'Callback; 13.08.2020

Если вы прочитаете о makecert, на который ссылается ответ @David Clarke, вы увидите, что для выполнения вашего требования вам просто нужен управляемый makecert, написанный на .NET.

К счастью, ребята из Mono уже давно реализовали это.

https://github.com/mono/mono/blob/master/mcs/tools/security/makecert.cs

person Lex Li    schedule 19.01.2012

Вы можете сделать цифровую подпись с помощью Adobe Reader

если вы используете Adobe X - затем перейдите к 3-му варианту слева - здесь вы можете увидеть настройку подписи - откройте это и перейдите к добавлению идентификатора - просто введите свои данные, и ваш файл .pfx готов, где бы вы его ни просматривали .. .. -действителен 6 лет

person abhijay    schedule 23.07.2013

Для этого вы можете использовать библиотеку OpenSSL.NET.

Вот пример кода, как это сделать:

    public X509Certificate2 GeneratePfxCertificate(string certificatePath, string privateKeyPath,
        string certificatePfxPath, string rootCertificatePath, string pkcs12Password)
    {
        string keyFileContent = File.ReadAllText(privateKeyPath);
        string certFileContent = File.ReadAllText(certificatePath);
        string rootCertFileContent = File.ReadAllText(rootCertificatePath);

        var certBio = new BIO(certFileContent);
        var rootCertBio = new BIO(rootCertFileContent);

        CryptoKey cryptoKey = CryptoKey.FromPrivateKey(keyFileContent, string.Empty);
        var certificate = new OpenSSL.X509.X509Certificate(certBio);
        var rootCertificate = new OpenSSL.X509.X509Certificate(rootCertBio);

        using (var certChain = new Stack<OpenSSL.X509.X509Certificate> { rootCertificate })
        using (var p12 = new PKCS12(pkcs12Password, cryptoKey, certificate, certChain))
        using (var pfxBio = BIO.MemoryBuffer())
        {
            p12.Write(pfxBio);
            var pfxFileByteArrayContent =
                pfxBio.ReadBytes((int)pfxBio.BytesPending).Array;

            File.WriteAllBytes(certificatePfxPath, pfxFileByteArrayContent);
        }

        return new X509Certificate2(certificatePfxPath, pkcs12Password);
    }
person SvjMan    schedule 22.11.2019