コード例 #1
0
        private static void _gerarPdfAssinado(AssinarDTO dadosAssinatura, string SRC, string DEST, ICipherParameters pk, X509Certificate[] chain)
        {
            using (FileStream fileStramDestino = new FileStream(DEST, FileMode.Create))
                using (PdfReader reader = new PdfReader(SRC))
                {
                    PdfSigner signer = new PdfSigner(reader, fileStramDestino, new StampingProperties());
                    _addCarimbo(dadosAssinatura, chain, signer);

                    //finalizando
                    IExternalSignature pks = new PrivateKeySignature(pk, DigestAlgorithms.SHA256);

                    signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
                }
        }
コード例 #2
0
        private static void _addCarimbo(AssinarDTO dadosAssinatura, X509Certificate[] chain, PdfSigner signer)
        {
            PdfSignatureAppearance appearance = signer.GetSignatureAppearance();
            var informacoesCertificado        = chain.First().SubjectDN.GetValueList();
            var assinante    = informacoesCertificado[informacoesCertificado.Count - 1];
            var textoCarimbo = $"Assinado digitalmente por: {assinante}. \n" +
                               $"Em: {dadosAssinatura.Local}. \n" +
                               $"Na data de: {DateTime.Now:dd/MM/yyyy} as {DateTime.Now:HH:mm}. \n" +
                               $"Razão: {dadosAssinatura.Razao}.";

            appearance.SetLayer2Text(textoCarimbo)
            .SetPageRect(new Rectangle(dadosAssinatura.GetPosicao().X, dadosAssinatura.GetPosicao().Y, dadosAssinatura.GetTamanho().X, dadosAssinatura.GetTamanho().Y))
            .SetLocation(dadosAssinatura.Local)
            .SetReason(dadosAssinatura.Razao)
            .SetSignatureCreator("SGI Digital Signature")
            .SetPageNumber(1)
            ;
            signer.SetFieldName("Campo de assinatura");
        }
コード例 #3
0
        private string _assinar(FileInfo certificadoFileInfo, AssinarDTO dadosAssinatura, FileInfo pdfFileInfo)
        {
            // codigo externo retirado do link: https://viewbag.wordpress.com/2019/12/24/pdf-digital-signatures-itext7-bouncy-castle-net-core/

            var diretorioCertificado = certificadoFileInfo.FullName;
            var senhaCertificado     = dadosAssinatura.Senha.ToCharArray();

            var SRC  = pdfFileInfo.FullName;
            var DEST = _diretorioArquivoAssinado.FullName + pdfFileInfo.Name;
            var urlArquivoAssinado = AssinarHelper.BASE_URL(Request, _hostingEnvironment.IsProduction()) + PASTA_ARQUIVO_ASSINADO + pdfFileInfo.Name;

            try
            {
                using (var chaveStram = new FileStream(diretorioCertificado, FileMode.Open, FileAccess.Read))
                {
                    Pkcs12Store pk12;
                    try
                    { pk12 = new Pkcs12Store(chaveStram, senhaCertificado); }
                    catch
                    {
                        _erros.Add("Não foi possivel abrir o certificado PFX, possiveis motivos: senha inválida para acessar o certificado, ou certificado corrompido.");
                        return("");
                    }
                    var alias = _obterAlias(pk12);
                    var pk    = pk12.GetKey(alias).Key;

                    var chain = _gerarCertificadoChain(pk12, alias);
                    _gerarPdfAssinado(dadosAssinatura, SRC, DEST, pk, chain);
                }
            }
            catch (Exception erro)
            {
                _erros.Add("Não foi possivel assinar o arquivo. Ocorreram erros ao gerar o arquivo assiando. erro: " + erro.Message);
                return("");
            }
            return(urlArquivoAssinado);
        }
コード例 #4
0
 private void _validarDadosAssinatura(AssinarDTO dadosAssinatura)
 {
     _validarCampo(dadosAssinatura.Senha, "json.senha");
     _validarCampo(dadosAssinatura.Local, "json.local");
     _validarCampo(dadosAssinatura.Razao, "json.razao");
 }