Null Ref Exception when signing pdf

Hi
When I use

PdfSaveOptions.DigitalSignatureDetails = New Words.Saving.PdfDigitalSignatureDetails(MyCertHolder, String.Empty, String.Empty, Date.Now)
PdfSaveOptions.DigitalSignatureDetails.HashAlgorithm = Words.Saving.PdfDigitalSignatureHashAlgorithm.Sha256

My pdf will sign, but if I add timestamping, I will get nullrefexception:

PdfSaveOptions.DigitalSignatureDetails.TimestampSettings = New Words.Saving.PdfDigitalSignatureTimestampSettings("http://timestamp.actalis.com", Nothing, Nothing)

Also tried:

PdfSaveOptions.DigitalSignatureDetails.TimestampSettings.ServerUrl = "http://timestamp.actalis.com"

Now although throw nullrefexception but it will sign and save but without timestamp!
No proper error!

When adding PdfDigitalSignatureTimestampSettings, what are username and password? Never heard of auth for timestamping server, anyway, it should be set to null or empty string?
Thanks.

@australian.dev.nerds Unfortunately, I cannot reproduce the problem on my side. I used the following code for testing:

Document doc = new Document(@"C:\Temp\in.docx");

PdfSaveOptions saveOptions = new PdfSaveOptions();
saveOptions.DigitalSignatureDetails = new PdfDigitalSignatureDetails(GetCertificateHolder(), "Sing please", "Kharkiv", DateTime.Now);
saveOptions.DigitalSignatureDetails.TimestampSettings =
    new PdfDigitalSignatureTimestampSettings("https://freetsa.org/tsr", null, null);

doc.Save(@"C:\Temp\out.pdf", saveOptions);
1 Like

Thanks, easy to reproduce:

usage:

        Dim MyDocument As Words.Document = New Words.Document("D:\0.txt", New Aspose.Words.Loading.LoadOptions(Words.LoadFormat.Text))
        If MyDocument IsNot Nothing Then
            MyDocument.Save("D:\0.pdf", psaveOptions)
        End If

SaveOptions:

    Friend Function psaveOptions() As Words.Saving.PdfSaveOptions
        psaveOptions = New Words.Saving.PdfSaveOptions()
        psaveOptions.SaveFormat = Words.SaveFormat.Pdf
        psaveOptions.AttachmentsEmbeddingMode = Words.Saving.PdfAttachmentsEmbeddingMode.Annotations
        psaveOptions.Compliance = Words.Saving.PdfCompliance.Pdf17
        psaveOptions.ColorMode = Words.Saving.ColorMode.Normal
        psaveOptions.ExportDocumentStructure = True
        psaveOptions.ExportGeneratorName = False
        psaveOptions.JpegQuality = 85
        psaveOptions.MemoryOptimization = False
        psaveOptions.DisplayDocTitle = True
        psaveOptions.PrettyFormat = False
        psaveOptions.TempFolder = Nothing
        psaveOptions.UseAntiAliasing = False
        psaveOptions.UseHighQualityRendering = False
        psaveOptions.OpenHyperlinksInNewWindow = True
        Dim MyCertHolder As CertificateHolder = CertificateHolder.Create(File.ReadAllBytes("D:\c.p12"), "pwd")
        If MyCertHolder IsNot Nothing Then
            psaveOptions.DigitalSignatureDetails = New Words.Saving.PdfDigitalSignatureDetails(MyCertHolder, String.Empty, String.Empty, Date.Now)
            psaveOptions.DigitalSignatureDetails.HashAlgorithm = Words.Saving.PdfDigitalSignatureHashAlgorithm.Sha256
            psaveOptions.DigitalSignatureDetails.TimestampSettings.ServerUrl = "http://timestamp.digicert.com"
            'psaveOptions.DigitalSignatureDetails.TimestampSettings = New Words.Saving.PdfDigitalSignatureTimestampSettings("http://timestamp.digicert.com", Nothing, Nothing)
        End If
    End Function

@australian.dev.nerds DigitalSignatureDetails.TimestampSettings is not created in your code, so it is expected that DigitalSignatureDetails.TimestampSettings.ServerUrl throws null reference exception.

1 Like

Thanks, is this correct?

psaveOptions.DigitalSignatureDetails = New Words.Saving.PdfDigitalSignatureDetails(MyCertHolder, String.Empty, String.Empty, Date.Now)
psaveOptions.DigitalSignatureDetails.HashAlgorithm = Words.Saving.PdfDigitalSignatureHashAlgorithm.Sha256
Dim s As New Words.Saving.PdfDigitalSignatureTimestampSettings
s.ServerUrl = "http://timestamp.digicert.com"
psaveOptions.DigitalSignatureDetails.TimestampSettings = s

If so, now null exception happens here:

@australian.dev.nerds Thank you for additional information. On my side the problem occurs only when http://timestamp.digicert.com is used. Internally the following exception is thrown:

Org.BouncyCastle.Tsp.TspValidationException : conflicting signing certificate attributes present.

The exception occurs on timestamp response validation. So it looks like it returns incorrect/unexpected response.

If use https://freetsa.org/tsr or http://timestamp.actalis.com the problem does not occur.