Пример #1
0
        public CertificateInfo convertFromCertificatoType(FirmaDigitale.CertificatoType certificateType)
        {
            CertificateInfo certifcateInfo = new CertificateInfo();

            certifcateInfo.IssuerName         = certificateType.issuer;
            certifcateInfo.SerialNumber       = certificateType.serialNumber;
            certifcateInfo.ValidFromDate      = certificateType.dataInizioValidita;
            certifcateInfo.ValidToDate        = certificateType.dataFineValidita;
            certifcateInfo.SubjectName        = certificateType.subject;
            certifcateInfo.SignatureAlgorithm = certificateType.dettaglioCertificato;
            return(certifcateInfo);
        }
Пример #2
0
        public EsitoVerifica VerificaCertificato(byte[] certificateDER, byte[] certificateCAPEM, FirmaDigitale.FirmaDigitalePortTypeClient client)
        {
            logger.Debug("INIZIO");
            List <string> addiData = new List <string>();
            EsitoVerifica ev       = new EsitoVerifica();
            // FirmaDigitale.DettaglioFirmaDigitaleType ret = null;
            CertificateInfo ciInfo           = new CertificateInfo();
            sbyte?          controlloCRLCert = 0;
            sbyte?          controlloCRLCa   = 1;

            ciInfo.X509Certificate = certificateDER;
            ciInfo.ThumbPrint      = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(certificateDER)).Replace("-", "");

            controlloCRLCert = null;
            int statusInt = -1;

            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3;
            DateTime dataverifica;

            try
            {
                logger.DebugFormat("len {0}", certificateDER.Length);
                FirmaDigitale.CertificatoType certOut = client.VerificaCertificato(certificateDER, certificateCAPEM, controlloCRLCert, controlloCRLCa, out dataverifica);
                logger.Debug("verificaOK");
                ciInfo    = convertFromCertificatoType(certOut);
                statusInt = 0;
            }

            catch (FaultException <FirmaDigitale.WarningCertificatoType> w)
            {
                string status = w.Detail.status;
                string errMsg = w.Detail.errorMsg;
                logger.Debug(status);
                logger.Debug(errMsg);
                addiData.Add(status);
                addiData.Add(errMsg);
                ciInfo = convertFromWarningCertificatoType(w.Detail);
                Int32.TryParse(w.Detail.status, out statusInt);
                ciInfo.RevocationStatus = statusInt;

                ev.errorCode = w.Detail.status.ToString();
                if (errMsg.ToLower().Contains("revoc"))
                {
                    ev.status = EsitoVerificaStatus.Revoked;
                }
                else
                {
                    ev.status = EsitoVerificaStatus.NotTimeValid;
                }
            }
            catch (Exception e)
            {
                logger.ErrorFormat("errore {0} {1}", e.Message, e.StackTrace);
                ev.message = e.Message;
            }

            // ciInfo.ThumbPrint = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(certificateDER)).Replace("-", "");
            ev.additionalData = addiData.ToArray();

            //quarda che devo fare per restituire il certificateinfo
            List <SignerInfo>    retSI = new List <SignerInfo>();
            List <PKCS7Document> p7doc = new List <PKCS7Document>();

            retSI.Add(new SignerInfo {
                CertificateInfo = ciInfo
            });
            p7doc.Add(new PKCS7Document {
                SignersInfo = retSI.ToArray()
            });
            ev.VerifySignatureResult = new VerifySignatureResult {
                StatusCode = statusInt, PKCS7Documents = p7doc.ToArray()
            };

            return(ev);
        }