Получение пустой ссылки при попытке проверить подпись с помощью MimeKit - PullRequest
0 голосов
/ 03 мая 2019

В настоящее время я работаю над proof of concept для реализации клиента AS2. Я настроил consle application, который работает как отправитель, и ASP .Net API, который работает как получатель. Я пытался добиться этого с помощью библиотеки Windows.Security, но там также были проблемы с проверкой подписи. Затем я нашел MimeKit, который казался более простым в использовании.

Пытаясь найти решение моей проблемы, мне казалось, что большинство вопросов о том, «как проверить подпись», ответы на вопросы, где сделать цикл foreach для подписей в MultipartSigned, я пытался сделать это, но это не помогло мне.

decrypted - это MimeEntity, содержащее все сообщение.

Нулевая ссылка появляется, когда я звоню signed.Verify();.

var signed = decrypted as MultipartSigned;
if (signed != null) {
    using (var ctx = new TemporaryMimeContext ()) {
        foreach (var signature in signed.Verify (ctx)) {
            try {
                bool valid = signature.Verify ();
            } catch (DigitalSignatureVerifyException) {
                // There was an error verifying the signature.
            }
        }
    }
}

Что должно произойти, так это то, что подписи должны быть в порядке, но в действительности происходит то, что null refrence exception происходит внутри файлов сборки.

Трассировка стека выглядит следующим образом

   at MimeKit.Cryptography.BouncyCastleSecureMimeContext.<GetDigitalSignaturesAsync>d__28.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MimeKit.Cryptography.BouncyCastleSecureMimeContext.Verify(Stream content, Stream signatureData, CancellationToken cancellationToken)
   at MimeKit.Cryptography.MultipartSigned.Verify(CryptographyContext ctx, CancellationToken cancellationToken)
   at AS2_Proof_of_Concept.WebAPI.Controllers.MimeKitController.IncomingMessage() in C:\Users\chris\source\repos\AS2 Proof of Concept\AS2_Proof_of_Concept\AS2_Proof_of_Concept.WebAPI\Controllers\MimeKitController.cs:line 104
   at Microsoft.Extensions.Internal.ObjectMethodExecutor.<>c__DisplayClass33_0.<WrapVoidMethod>b__0(Object target, Object[] parameters)
   at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
   at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.VoidResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__12.MoveNext()

EDIT

Вот как выглядит сообщение signed.

Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="----=_Part_946d8daa50ab44b699f82dbd3c6bacc0"

------=_Part_946d8daa50ab44b699f82dbd3c6bacc0
Content-Type: application/EDIFACT
Content-Transfer-Encoding: binary
Content-Disposition: attachment filename= HelloWorld.txt

test
------=_Part_946d8daa50ab44b699f82dbd3c6bacc0
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment filename="smime.p7s"

MIIEmQYJKoZIhvcNAQcCoIIEijCCBIYCAQExDTALBglghkgBZQMEAgEwCwYJKoZIhvcNAQcBoIID
EzCCAw8wggH3oAMCAQICEHRJ0r9pduGJTCHsDzuElc4wDQYJKoZIhvcNAQELBQAwETEPMA0GA1UE
AwwGTXlDZXJ0MB4XDTE5MDMyNTEzNTQzMloXDTIwMDMyNTE0MTQzMlowETEPMA0GA1UEAwwGTXlD
ZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApOwOacjTjhHOqTzq3EhnQG3HHfO8
YjCE/+CKcbz++mCQ2gkNVyx37rnrNrSuPp6rYZioKss9sYtwaYUe4iyisZBe7rKWNE9itScZBnwj
SCWDId0zrdd+74bkoz8OOvCizjhIcQNmuq5IyCtwB6kF3VAs58QWacjT1C7sVO+YlZdItp97LqzD
s3N8ERCJWRwWawER9h3lkg+WZWSCG2D9SYaU5fv8PNLmQyTYaacRT32WPLjSoM3YB4J9/LXrfPg+
zrK1z+TByyCmnAeFUo3f7VLrtLZYlnbqEz+WkCmZLh9BQvPjt5M2FU+uljIhaooehEPjQa9MRnUY
il4/inh+FQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsG
AQUFBwMBMBEGA1UdEQQKMAiCBk15Q2VydDAdBgNVHQ4EFgQUaPko4FVtzSG9dxjfY30qhq3sGd0w
DQYJKoZIhvcNAQELBQADggEBAEcfxDHRyfjr378ieNwXRodb6/tCZoFXAHaJtEnNfMfbxit324cW
rKt43dQTYg/ByFRV3HZooeNDp8lNCT7zSfiBnxLaqyDPeNuoG910CVdJ3dp2fh5Jphof4R9hgVdx
FX8BNQYH+QdrNndbCdQr/UPbuc+lmuKMCHDW8HtEOcaMoa5CvIZtL6+w9ofFAz8nWEmngagCYavb
x0fz/XZGQ4zriFs9LZEuAF36QJWsbIc53r0KwZY5r7PTuipqQu5BdkF71ljqE39e9A0nLeYN0D/u
hqstrv4+koq1EiDL/hSJLDjLJF9WZK6UYZobikhWo2QCzMapo5nPHxbTWr98bCgxggFMMIIBSAIB
ATAlMBExDzANBgNVBAMMBk15Q2VydAIQdEnSv2l24YlMIewPO4SVzjALBglghkgBZQMEAgEwCwYJ
KoZIhvcNAQEBBIIBAJyIRI42Um2T1PCq/1rmAagSvogVPinemzQHBwxMN+GNDbyOxDom2jN5j7bC
6xb5PIA/hGGhGcPxY7056Llk/FV3nxN1fjiap7sS7HOzY3YkyzlxWMt93VE0auJJKmDCg1+0tTxs
IjXVYRSIwyiMXNltkGCPH4mTWCgy+M9XsQa5iPm/v+9XPcStnO8b/k8Cy3WWxEztwEl6wwiCywUU
V0OUUAZis5zkoYKrmpSZMN+T5jW6IJ566e1lc/jV5CX6D5Ukcskpmd8WdJyO5mPVRpbXuAJnzkoj
66KO8IjHRQzN8ihB3rj9+yZVdFQNobXBzNH4cVqO845OwhD5JbJFtWQ=
------=_Part_946d8daa50ab44b699f82dbd3c6bacc0--

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Это была допустимая ошибка в Mime 2.1.4, которая теперь исправлена ​​в сборке 2.1.4.9, расположенной в https://www.myget.org/feed/mimekit/package/nuget/MimeKit

0 голосов
/ 06 мая 2019

Проходя по методу BounncyCastleMimeContext.GetDigitalSignatureAsync(), я обнаружил, что SignerInformation.SignedAttributes в SecureMimeDigitalSignature (SignerInformation signerInfo, X509Certificate certificate) равнялся null, а затем из-за этого нулевого референса signature.EncryptionAlgorithms тоже стало null.

...