Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kcirtapsi

Assinar documento digitalmente

Recommended Posts

Boa tarde,

 

É possível assinar um documento digitalmente com o PHP?

 

Sendo que o processo seria, o arquivo estando no servidor, por meio de uma página PHP, o usuário assina o documento,

utilizando seu certificado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Loconarrativo
      Eu recebi aqui alguns arquivos .cer e preciso instalar no servidor que tenho, ele esta com CentOS. Os que tenho aqui são: 
      Autoridade_Certificadora_ RaizBrasileira_v5.cer SERASA_Autoridade_Certificadora_Principal_v5.cer SERASA_CD_SSL_V5.cer cobranca.bb.com.br.cer Qualquer informação é bem vinda, sou totalmente leigo nessa area!
       
    • Por peterhall
      Preciso consumir um web service soap (wsdl) com certificado digital mas não estou a conseguir.
      Testei através do SoapUI e resultou sem erros, mas na hora de aplicar num script de php, não estou a conseguir que funcione.
      O que fiz até ao momento: converti o certificado digital de .pfx para .pem com chave privada incluída e procurei executar o script com os parâmetros de conexão e xsd de saída.
      Na documentação consta este xsd de saída:
       
      A resposta, se com erro, deverá ser:
       
      Resposta sem erro:
       
      O meu script:
      <?php date_default_timezone_set("America/Fortaleza"); $time = new DateTime; $data = $time->format(DateTime::ATOM); $wsdl = 'https://selodigital.tjce.jus.br/wsselodigital-homologacao/SolicitacaoSelo?wsdl'; $endpoint = 'https://selodigital.tjce.jus.br/wsselodigital-homologacao/SolicitacaoSelo'; $certificate = "certificado.pem"; $password = 'senha'; $options = array( 'location' => $endpoint, 'keep_alive' => true, 'trace' => true, 'local_cert' => $certificate, 'passphrase' => $password, 'cache_wsdl' => WSDL_CACHE_NONE, array('versao' => '1.12', 'dataHora' => $data, 'ambiente' => '2', 'codigoServentia' => '000123', 'nomePessoa' => 'Nome de Teste', 'tipoDocumento' => '1', 'idSolicitacaoSelo' => '1', 'sequencial' => '1', 'codigo' => '6', 'quantidade' => '10' ) ); try { $soapClient = new SoapClient($wsdl, $options); } catch(Exception $e) { var_dump($e); }  
      O erro que tenho recebido:
       
      Onde estarei errando?
    • Por Juan Roas
      Gente tenho uma aplicação Web Forms feita com Activix e itextsharp.dll, que assina um documento PDF, quando rodo a aplicação na minha maquina funciona, porem quando publico ela no servidor Windows funciona somente ate o momento que a aplicação solicita o certificado do navegador do cliente mas quando vai exibir a caixa para digitar a senha(pin) do token(A3 - USB) não mostra. Na classe AClass.cs tem o método do Itextsharp.dll que chama o Pin - MakeSignature.SignDetached();
      ​alguém pode me ajudar? segue o que consegui ate agora.


      <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebTest45.Default" %> <!DOCTYPE html> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script language="javascript"> function assinar() { if (confirm("Deseja confirmar essa operação?")) { var x = new ActiveXObject("ANamespace.AClass"); x.Assinador(document.getElementById("hdfPath").value); return true; } else { return false; } } </script> </head> <body> <form id="form1" runat="server"> <asp:HiddenField runat="server" ID="hdfPath" /> Criar Documento: <div> <asp:TextBox runat="server" ID="txtCriar" Style="width: 155px; padding-top: 2px"></asp:TextBox> </div> <div style="padding-left: 5px; top: 20px;"> <asp:LinkButton runat="server" ID="LinkButton2" type="button" OnClick="CriarDocumento" class="btn btn-primary">Criar Documento</asp:LinkButton> </div> <div style="padding-left: 5px; top: 20px;"> <asp:LinkButton runat="server" ID="LinkButton1" type="button" OnClientClick="javascript:return assinar();" class="btn btn-primary">Assinar</asp:LinkButton> </div> <div style="padding-left: 5px; top: 20px;"> <asp:LinkButton runat="server" ID="LinkButton3" type="button" OnClick="Download" class="btn btn-primary">Download</asp:LinkButton> </div> </form> </body> </html>

      using iTextSharp.text; using iTextSharp.text.pdf; using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Net; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebTest45 { public partial class Default : System.Web.UI.Page { string path { get { return ViewState["PATH"] == null ? string.Empty : (string)ViewState["PATH"]; } set { ViewState["PATH"] = value; } } string Arquivo { get { return ViewState["ARQUIVO"] == null ? string.Empty : (string)ViewState["ARQUIVO"]; } set { ViewState["ARQUIVO"] = value; } } protected void Page_Load(object sender, EventArgs e) { string msgErro = string.Empty; try { if (!IsPostBack) { Session["PATH"] = "~//anexos//"; } } catch (Exception ex) { msgErro = ex.Message; throw new Exception("Error-" + ex.Message); } } public void CriarDocumento(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtCriar.Text)) { path = Session["PATH"].ToString(); path = Server.MapPath(path); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } Arquivo = txtCriar.Text; hdfPath.Value = path + Arquivo; FileStream fs = new FileStream(path + Arquivo + ".pdf", FileMode.Create, FileAccess.Write, FileShare.None); Document doc = new Document(); PdfWriter writer = PdfWriter.GetInstance(doc, fs); doc.Open(); doc.Add(new Paragraph("TESTANDO ASSINATURA NOVA PARA O ARQUIVO:" + Arquivo)); doc.Close(); } } public void Download(object sender, EventArgs e) { if (!string.IsNullOrEmpty(Arquivo)) { FileStream sourceFile = new FileStream(Server.MapPath("~//anexos//" + Arquivo + "Assinado.pdf"), FileMode.Open); float FileSize; FileSize = sourceFile.Length; byte[] fileContent = new byte[(int)FileSize]; sourceFile.Read(fileContent, 0, (int)sourceFile.Length); sourceFile.Close(); Response.ClearContent(); Response.ClearHeaders(); Response.Buffer = true; Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Length", fileContent.Length.ToString()); Response.AddHeader("Content-Disposition", "attachment; filename=Teste.pdf"); Response.BinaryWrite(fileContent); Response.Flush(); Response.End(); } } } }

      using System; using System.Runtime.InteropServices; using System.Security.Cryptography.X509Certificates; using Org.BouncyCastle.X509; using Org.BouncyCastle.Security; using iTextSharp.text.pdf; using System.IO; using iTextSharp.text.pdf.security; using System.Collections.Generic; using System.Collections; namespace ANamespace { [ClassInterface(ClassInterfaceType.AutoDual)] public class AClass { public void Assinador(string path_NomeArquivo) { X509CertificateParser cp = new X509CertificateParser(); //BUSCA OS CERTIFICADOS DO USUARIO X509Certificate2 certClient = null; X509Store st = new X509Store(StoreName.My, StoreLocation.CurrentUser); st.Open(OpenFlags.MaxAllowed); X509Certificate2Collection collection = X509Certificate2UI.SelectFromCollection(st.Certificates, "Por Favor, Escolha um certificado:", "", X509SelectionFlag.SingleSelection); if (collection.Count > 0) { certClient = collection[0]; } st.Close(); //Get Cert Chain IList<Org.BouncyCastle.X509.X509Certificate> chain = new List<Org.BouncyCastle.X509.X509Certificate>(); X509Chain x509chain = new X509Chain(); x509chain.Build(certClient); foreach (X509ChainElement x509ChainElement in x509chain.ChainElements) { chain.Add(DotNetUtilities.FromX509Certificate(x509ChainElement.Certificate)); } //ARQUIVO PARA ASSINAR PdfReader reader = new PdfReader(path_NomeArquivo + ".pdf"); //NOVO DOCUMENTO FileStream resStream = new FileStream(path_NomeArquivo + "Assinado.pdf", FileMode.Create, FileAccess.ReadWrite); PdfStamper stamper = PdfStamper.CreateSignature(reader, resStream, '\0', null, true); PdfSignatureAppearance appearance = stamper.SignatureAppearance; appearance.ReasonCaption = "Descrição:"; appearance.Reason = "Assinar Documento Teste"; appearance.LocationCaption = "Local:"; appearance.Location = "Defensoria Publica"; //Local onde fica o Field da assinatura digital if (stamper.Reader.Info["CreationDate"].ToString() == stamper.Reader.Info["ModDate"].ToString()) { appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(20, 10, 170, 60), 1, "Signed"); } X509Certificate2Signature es = new X509Certificate2Signature(certClient, "SHA-1"); //SOLICITA SENHA MakeSignature.SignDetached(appearance, es, chain, null, null, null, 0, CryptoStandard.CMS); } } }  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.