Проверка сертификата iText - PullRequest
0 голосов
/ 24 мая 2019

Я следую примеру проверки сертификата iText (это третий пример, найденный здесь: https://itextpdf.com/en/resources/examples/itext-7/digital-signatures-chapter-5).

Я не совсем получаю следующий фрагмент кода (я использую iTextsharp с C #, но код для Java похож):

PdfPKCS7 pkcs7 = base.VerifySignature(fields, name);
X509Certificate[] certs = pkcs7.SignCertificateChain;
DateTime cal = pkcs7.SignDate;
Object[] errors = CertificateVerification.VerifyCertificates(certs, certificates, null, cal);

certificates - это список, используемый для проверки certs (certificates являются доверенными сертификатами). В примере он создается из следующих файлов:

public const String ADOBE = "../../../../resources/adobeRootCA.cer";
public const String CACERT = "../../../../resources/CACertSigningAuthority.crt";
public const String BRUNO = "../../../../resources/bruno.crt";

Я не уверен, откуда мне взять эти файлы при попытке реализовать это самостоятельно.
Я думаю о проверке сертификатов подписей по доверенным сертификатам в хранилище Windows, но поскольку я не понимаю, почему в примере используются эти файлы, я не уверен, что проверка по хранилищу Windows будет в порядке.

Ответы [ 3 ]

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

Пожалуйста, обратитесь к первой и второй главам Digital Signatures for PDF documents (примеры, которые вы нашли на сайте, взяты из этой публикации; ее можно легко найти в Интернете или бесплатно запросить на сайте iText).

Там вы можете найти, как использовать keytool Java для создания сертификатов.

Например, для bruno.crt код выглядит следующим образом:

keytool -export -alias demo -file bruno.crt -keystore ks -storepass password
0 голосов
/ 28 мая 2019

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

Это зависит от вашего варианта использования.

Например:

  • Если вы хотите выполнить валидацию, аналогичную Adobe Reader, вам нужно будет доверять всем сертификатам в утвержденном списке доверия Adobe и списках доверия Европейского союза plus ( в зависимости от вашей конфигурации) сертификаты из доверенного хранилища ОС.

  • Если вы хотите проверить личные подписи в Индии, вы, скорее всего, захотите доверять сертификатам Aadhaar CA.

  • Во внутреннем приложении компании вы можете доверять корневым сертификатам PKI этой компании.

  • В примере кода API своей подписи может потребоваться доверять самозаверяющему сертификату, созданному для использования в этих примерах для подписи (как bruno.crt выше в примере кода для API подписи iText).

  • и т. Д. И т. Д.

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

параметр сертификата в методе CertificateVerification.VerifyCertificates относится к списку типов BouncyCastle, поэтому вам потребуется преобразовать сертификаты хранилища сертификатов Windows в сертификаты типа BouncyCastle.

Ниже может быть полезен код:

        public void Test()
        {
            List<Org.BouncyCastle.X509.X509Certificate> certificates = new List<Org.BouncyCastle.X509.X509Certificate>();
            foreach (X509Certificate2 netCert in (new X509Store()).Certificates)
            {
                certificates.Add(Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(netCert));
            }
        }
...