Используя тестовый сертификат, подписать документ цифровым способом в aspose.words - PullRequest
1 голос
/ 24 октября 2011

Я пытаюсь создать модульный тест, который генерирует пустой тестовый документ, аналогичный тому, который был найден в примере Aspose Words.Я создал тестовый сертификат с помощью makecert.exe со следующей строкой в ​​командной строке VS

makecert.exe -sv MyKey.pvk -n "CN=MY DIGITAL KEY" MyKey.cer

Затем я преобразовал его в файл .pvk, используя следующую строку

pvk2pfx.exe -pvk MyKey.pvk -spc MyKey.cer -pfx MyPFX.pfx

Послеэто было сделано, я скопировал файл .pfx в мое консольное приложение .net и установил параметр копирования всегда копировать, чтобы файл копировался в каталог bin при тестировании приложения в режиме отладки.

Мое консольное приложениезатем содержит следующие строки кода, которые пытаются записать pdf с цифровой подписью.

static void Main()
{
string MyDir = AppDomain.CurrentDomain.BaseDirectory;
// Create a simple document from scratch.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Writeln("Test Signed PDF.");
// Load the certificate from disk.
// The other constructor overloads can be used to load certificates from different locations.
X509Certificate2 cert = new X509Certificate2(MyDir + "RpaKey.pfx", "");
Console.WriteLine("Loading certificate...");
// Pass the certificate and details to the save options class to sign with.
PdfSaveOptions options = new PdfSaveOptions();
options.DigitalSignatureDetails = new PdfDigitalSignatureDetails(
cert,
"Test Signing",
"Aspose Office",
DateTime.Now);
Console.WriteLine("Creating digital signature details...");
try
{
// Save the document as PDF with the digital signature set.
doc.Save(MyDir + "Document.Signed Out.pdf", options);
Console.WriteLine("File saved successfully.");
}
catch (Exception ex)
{
Console.WriteLine("File write failed.");
Console.WriteLine(ex.Message);
if (ex.InnerException != null)
{
Console.WriteLine("");
Console.WriteLine(ex.InnerException);
}
}
Console.ReadKey();
}

Однако я продолжаю получать ошибку «указан неверный алгоритм» без внутреннего исключения.Кто-нибудь сталкивался с этой проблемой?Я пропустил шаг?Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Я согласен с Poupou, что полная трассировка стека поможет понять, где именно генерируется исключение и почему.Более того, если эта проблема не исчезнет с вашей стороны, вы также можете обратиться в нашу службу поддержки через форум Aspose.Words .Придется подробно изучить эту проблему и выяснить, действительно ли она вызвана Aspose.Words.И если так, мы предоставим вам исправление для этого.

Более того, поскольку вы создаете очень простой документ, похоже, что проблема, вероятно, вызвана подписью.Не могли бы вы попробовать другой файл подписи?

Раскрытие информации: я работаю евангелистом разработчика в Aspose.

1 голос
/ 25 октября 2011

Никогда не использовал Aspose себя, но сначала вы должны убедиться, что ваше преобразование из PVK в формат PFX работает так, как вы ожидали.

Измените это:

X509Certificate2 cert = new X509Certificate2(MyDir + "RpaKey.pfx", "");
Console.WriteLine("Loading certificate...");

на

X509Certificate2 cert = new X509Certificate2(MyDir + "RpaKey.pfx", "");
Console.WriteLine("Loading certificate... private key available ? {0}", cert.HasPrivateKey);

Обратите внимание, что оно, вероятно, прошло успешно, поскольку не было никаких исключений - но это по крайней мере подтвердит первую частьваш процесс действителен: -)

Если это показывает true , то вам следует обновить свой вопрос, чтобы показать полную трассировку стека из вашего исключения, например,

catch (Exception ex)
{
    Console.WriteLine(ex);
}

, такмы увидим, произошла ли ошибка от Aspose или от самого BCL.

...