internal CertificateStatus GetStatus(CertificateID certificateId)
        {
            if (certificateId == null)
            {
                throw new ArgumentNullException(nameof(certificateId));
            }

            if (certificateId.MatchesIssuer(Certificate) &&
                _issuedCertificates.ContainsKey(certificateId.SerialNumber))
            {
                RevocationInfo revocationInfo;

                if (!_revokedCertificates.TryGetValue(certificateId.SerialNumber, out revocationInfo))
                {
                    return(CertificateStatus.Good);
                }

                var datetimeString = DerGeneralizedTimeUtility.ToDerGeneralizedTimeString(revocationInfo.RevocationDate);

                // The DateTime constructor truncates fractional seconds;
                // however, the string constructor preserves full accuracy.
                var revocationDate = new DerGeneralizedTime(datetimeString);
                var reason         = new CrlReason((int)revocationInfo.Reason);
                var revokedInfo    = new RevokedInfo(revocationDate, reason);

                return(new RevokedStatus(revokedInfo));
            }

            return(new UnknownStatus());
        }
        internal CertificateStatus GetStatus(CertificateID certificateId)
        {
            if (certificateId == null)
            {
                throw new ArgumentNullException(nameof(certificateId));
            }

            if (certificateId.MatchesIssuer(Certificate) &&
                _issuedCertificates.ContainsKey(certificateId.SerialNumber))
            {
                RevocationInfo revocationInfo;

                if (!_revokedCertificates.TryGetValue(certificateId.SerialNumber, out revocationInfo))
                {
                    return(CertificateStatus.Good);
                }

                var revocationDate = new DerGeneralizedTime(revocationInfo.RevocationDate);
                var reason         = new CrlReason(revocationInfo.Reason);
                var revokedInfo    = new RevokedInfo(revocationDate, reason);

                return(new RevokedStatus(revokedInfo));
            }

            return(new UnknownStatus());
        }
示例#3
0
        public object GetCertStatus()
        {
            CertStatus certStatus = this.resp.CertStatus;

            if (certStatus.TagNo == 0)
            {
                return(null);
            }
            if (certStatus.TagNo == 1)
            {
                return(new RevokedStatus(RevokedInfo.GetInstance(certStatus.Status)));
            }
            return(new UnknownStatus());
        }
示例#4
0
        public Object getCertStatus()
        {
            CertStatus s = resp.getCertStatus();

            if (s.getTagNo() == 0)
            {
                return(null);            // good
            }
            else if (s.getTagNo() == 1)
            {
                return(new RevokedStatus(RevokedInfo.getInstance(s.getStatus())));
            }

            return(new UnknownStatus());
        }
示例#5
0
    public CertStatus(Asn1TaggedObject choice)
    {
        tagNo = choice.TagNo;
        switch (choice.TagNo)
        {
        case 1:
            value = RevokedInfo.GetInstance(choice, explicitly: false);
            break;

        case 0:
        case 2:
            value = DerNull.Instance;
            break;
        }
    }
示例#6
0
        /**
         * Return the status object for the response - null indicates good.
         *
         * @return the status object for the response, null if it is good.
         */
        public object GetCertStatus()
        {
            CertStatus s = resp.CertStatus;

            if (s.TagNo == 0)
            {
                return(null);                           // good
            }

            if (s.TagNo == 1)
            {
                return(new RevokedStatus(RevokedInfo.GetInstance(s.Status)));
            }

            return(new UnknownStatus());
        }
示例#7
0
 public RevokedStatus(
     DateTime revocationDate,
     int reason)
 {
     this.info = new RevokedInfo(new DerGeneralizedTime(revocationDate), new CrlReason(reason));
 }
示例#8
0
 public RevokedStatus(
     RevokedInfo info)
 {
     this.info = info;
 }
示例#9
0
 public RevokedStatus(global::System.DateTime revocationDate, int reason)
 {
     info = new RevokedInfo(new DerGeneralizedTime(revocationDate), new CrlReason(reason));
 }
示例#10
0
 public CertStatus(RevokedInfo info)
 {
     tagNo = 1;
     value = info;
 }
示例#11
0
        public override void handlePOSTRequest(HttpProcessor p, MemoryStream ms)
        {
            try
            {
                byte[]      ocspdata = ms.ToArray();
                OcspReq     req      = new OcspReq(ocspdata);
                GeneralName name     = req.RequestorName;
                if (validator != null)
                {
                    string stat = "GOOD";
                    foreach (CertificateID id in req.GetIDs())
                    {
                        Stopwatch st = new Stopwatch();
                        st.Start();
                        OCSPCache cac = GetCache(id.SerialNumber.LongValue);
                        if (cac != null)
                        {
                            Console.Write("[CACHED] ");
                            string header        = GetRFC822Date(cac.CacheTime);
                            byte[] responseBytes = cac.data;
                            p.outputStream.WriteLine("HTTP/1.1 200 OK");
                            p.outputStream.WriteLine("content-transfer-encoding: binary");
                            p.outputStream.WriteLine("Last-Modified: " + header);
                            p.outputStream.WriteLine("Content-Type: application/ocsp-response");
                            p.outputStream.WriteLine("Connection: keep-alive");
                            p.outputStream.WriteLine("Accept-Ranges: bytes");
                            p.outputStream.WriteLine("Server: AS-OCSP-1.0");
                            p.outputStream.WriteLine("Content-Length: " + responseBytes.Length.ToString());
                            p.outputStream.WriteLine("");
                            p.outputStream.WriteContent(responseBytes);
                        }
                        else
                        {
                            // validate
                            OCSPRespGenerator gen = new OCSPRespGenerator();

                            BasicOcspRespGenerator resp = new BasicOcspRespGenerator(validator.CACert.GetPublicKey());

                            DerGeneralizedTime dt     = new DerGeneralizedTime(DateTime.Parse("03/09/2014 14:00:00"));
                            CrlReason          reason = new CrlReason(CrlReason.CACompromise);

                            if (validator.IsRevoked(id, ref dt, ref reason))
                            {
                                RevokedInfo   rinfo   = new RevokedInfo(dt, reason);
                                RevokedStatus rstatus = new RevokedStatus(rinfo);
                                resp.AddResponse(id, rstatus);
                                stat = "REVOKED";
                            }
                            else
                            {
                                resp.AddResponse(id, CertificateStatus.Good);
                            }

                            BasicOcspResp response = resp.Generate("SHA1withRSA", validator.CAKey, new X509Certificate[] { validator.CACert }, DateTime.Now);
                            OcspResp      or       = gen.Generate(OCSPRespGenerator.Successful, response);
                            string        header   = GetRFC822Date(DateTime.Now);

                            byte[] responseBytes = or.GetEncoded();
                            AddCache(responseBytes, id.SerialNumber.LongValue);
                            p.outputStream.WriteLine("HTTP/1.1 200 OK");
                            p.outputStream.WriteLine("content-transfer-encoding: binary");
                            p.outputStream.WriteLine("Last-Modified: " + header);
                            p.outputStream.WriteLine("Content-Type: application/ocsp-response");
                            p.outputStream.WriteLine("Connection: keep-alive");
                            p.outputStream.WriteLine("Accept-Ranges: bytes");
                            p.outputStream.WriteLine("Server: AS-OCSP-1.0");
                            p.outputStream.WriteLine("Content-Length: " + responseBytes.Length.ToString());
                            p.outputStream.WriteLine("");
                            p.outputStream.WriteContent(responseBytes);
                        }
                        Console.Write(id.SerialNumber + " PROCESSED IN " + st.Elapsed + " STATUS " + stat);
                        Console.WriteLine("");
                    }
                }
                else
                {
                    p.writeFailure();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("OCSP Server Error : " + ex.Message);
            }
        }