Elektroniskā paraksta integrācija informācijas sistēmāsPubliskie servisi izstrādātājiem<br />
Saturs<br />Sertifikāta uzticamības pārbaude<br />Sertifikāta statusa publicēšana<br /><ul><li>CRL
OCSP</li></ul>Laika zīmogu serviss<br />LDAP direktorijs<br />
Kopskats (parakstīšana, autentificēšana)<br />eDokumenta nosūtīšana<br />Parakstītājs<br />Pārbaudītājs<br />OCSP  (over H...
Kopskats (šifrēšana)<br />Šifrētās informācijas <br />nosūtīšana<br />Šifrētājs<br />Saņēmējs<br />OCSP  (over HTTP)<br />...
Sertifikāta uzticamības pārbaude<br />Saknes sertifikātam jābūt uzticamam<br />Pārbauda visu sertifikātu parakstus<br />Iz...
Demo<br />Sertifikāta ķēdes un derīguma termiņa pārbaude<br />
Sertifikāta ķēdes un aktivitātes pārbaude<br />Statuss CRL sarakstos netiks pārbaudīts – tiks veidota tikai sertifikātu ķē...
Sertifikāta statusa publicēšana<br />OCSP  (over HTTP)<br />TSP  (over HTTPS)<br />HTTP<br />LDAP v3<br />LDAP v3<br />LDA...
OCSP <br />3.<br />Pārbauda OCSP atbildes parakstu<br />un OCSP sertifikāta derīgumu<br />(AIA, CRL, paraksta pārbaude)<br...
Demo<br />Sertifikāta statusa pārbaude<br />(CRL, OCSP)<br />
Sertifikāta statusa pārbaude CRL<br />Statuss CRL sarakstos tiek pārbaudīts, izmantojot kešotos CRL sarakstus klienta dato...
Sertifikāta statusa pārbaude OCSP<br />Cert ir X509Certificate2 klases instance, kas satur pārbaudāmo sertifikātu<br />   ...
Laika zīmogu serviss<br />3.<br />Pārbauda TSA atbildes parakstu<br />un TSA sertifikāta derīgumu<br />(AIA, CRL/OCSP, <br...
Demo<br />Laika zīmoga pieprasīšana<br />
Laika zīmoga pieprasīšana<br />Palīgmetode lūdz lietotājam izvēlēties klienta autentifikācijas sertifikātu<br />          ...
Sertifikātu meklēšana direktorijā<br />3.<br />Nolasa nepieciešamos <br />atribūtus (sertifikātu)<br />un šifrē nosūtāmo z...
Sertifikātu direktorija struktūra<br />C = LV <br />O = E-ME<br />OU = Sertifikācijas pakalpojumu daļa<br />CN = E-ME PSI ...
Personas sertifikāta ieraksta informācija<br />
Demo<br />Informācijas meklēšana LDAP<br />
Informācijas meklēšana LDAP<br />   <br />                LdapDirectoryIdentifier ldapId = new LdapDirectoryIdentifier("em...
Upcoming SlideShare
Loading in …5
×

LVRTC publiskie servisi: CRL un OCSP, laika zīmogi, LDAP

2,089 views

Published on

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,089
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

LVRTC publiskie servisi: CRL un OCSP, laika zīmogi, LDAP

  1. 1. Elektroniskā paraksta integrācija informācijas sistēmāsPubliskie servisi izstrādātājiem<br />
  2. 2. Saturs<br />Sertifikāta uzticamības pārbaude<br />Sertifikāta statusa publicēšana<br /><ul><li>CRL
  3. 3. OCSP</li></ul>Laika zīmogu serviss<br />LDAP direktorijs<br />
  4. 4. Kopskats (parakstīšana, autentificēšana)<br />eDokumenta nosūtīšana<br />Parakstītājs<br />Pārbaudītājs<br />OCSP (over HTTP)<br />TSP (over HTTPS)<br />HTTP<br />LDAP v3<br />LDAP v3<br />LDAP v3<br />HTTP<br />Laika zīmogu serviss<br />On-line statusa serviss<br />CRL novietne<br />AIA novietne<br />Sertifikātu direktorijs<br />LVRTC e-me<br />
  5. 5. Kopskats (šifrēšana)<br />Šifrētās informācijas <br />nosūtīšana<br />Šifrētājs<br />Saņēmējs<br />OCSP (over HTTP)<br />TSP (over HTTPS)<br />HTTP<br />LDAP v3<br />LDAP v3<br />LDAP v3<br />HTTP<br />Laika zīmogu serviss<br />On-line statusa serviss<br />CRL novietne<br />AIA novietne<br />Sertifikātu direktorijs<br />LVRTC e-me<br />
  6. 6. Sertifikāta uzticamības pārbaude<br />Saknes sertifikātam jābūt uzticamam<br />Pārbauda visu sertifikātu parakstus<br />Izmanto info<br />sertifikātā<br />OCSP (over HTTP)<br />TSP (over HTTPS)<br />HTTP<br />LDAP v3<br />LDAP v3<br />LDAP v3<br />HTTP<br />Laika zīmogu serviss<br />On-line statusa serviss<br />CRL novietne<br />AIA novietne<br />Sertifikātu direktorijs<br />LVRTC e-me<br />
  7. 7. Demo<br />Sertifikāta ķēdes un derīguma termiņa pārbaude<br />
  8. 8. Sertifikāta ķēdes un aktivitātes pārbaude<br />Statuss CRL sarakstos netiks pārbaudīts – tiks veidota tikai sertifikātu ķēde<br />    private bool IsTrustedAndActive(X509Certificate2 subjectCertificate)        {            // build chain to validate all signatures in it            // (do not check statuses in this step)            X509Chain chain = new X509Chain();            chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;            bool chainBuilt = chain.Build(subjectCertificate);            if (chainBuilt)            {                // check if at the moment certificate is active (i.e., not                // before its actication date and not after its expiry date)                DateTime validationDateAndTime = DateTime.Now;                if (subjectCertificate.NotBefore <= validationDateAndTime &&                    subjectCertificate.NotAfter >= validationDateAndTime)                {                    return true;                }            }            return false;        }<br />Pārbaudi veicam pēc pašreizējā datuma. <br />Dokumentu pārbaudē, iespējams, jāveic pēc dokumenta parakstīšanas datuma<br />
  9. 9. Sertifikāta statusa publicēšana<br />OCSP (over HTTP)<br />TSP (over HTTPS)<br />HTTP<br />LDAP v3<br />LDAP v3<br />LDAP v3<br />HTTP<br />Laika zīmogu serviss<br />On-line statusa serviss<br />CRL novietne<br />AIA novietne<br />Sertifikātu direktorijs <br />LVRTC e-me<br />
  10. 10. OCSP <br />3.<br />Pārbauda OCSP atbildes parakstu<br />un OCSP sertifikāta derīgumu<br />(AIA, CRL, paraksta pārbaude)<br />2.<br />Saņem OCSP atbildi<br />1.<br />Pieprasa 1 – N sertifikātu<br />statusa informāciju<br />Pārbaudītājs<br />Atbildes statuss<br />Masīvs no:<br />OCSP paraksts<br />Masīvs no:<br />Statuss<br />Izdevēja ID<br />Detaļas<br />Sertifikāta ID<br />Sertifikāta ID<br />OCSP (over HTTP)<br />On-line statusa serviss<br />
  11. 11. Demo<br />Sertifikāta statusa pārbaude<br />(CRL, OCSP)<br />
  12. 12. Sertifikāta statusa pārbaude CRL<br />Statuss CRL sarakstos tiek pārbaudīts, izmantojot kešotos CRL sarakstus klienta datorā (ja tādi ir)<br />            X509Chain chain = new X509Chain();            chain.ChainPolicy.RevocationMode = X509RevocationMode.Offline;            bool chainBuiltAndStatusesOK = chain.Build(subjectCertificate);<br />Ja mainīgā vērtība True, tad pārbaude veiksmīga un statusi visas ķēdes sertifikātiem ir OK<br />
  13. 13. Sertifikāta statusa pārbaude OCSP<br />Cert ir X509Certificate2 klases instance, kas satur pārbaudāmo sertifikātu<br />   <br />                // validate certificate using OCSP                OcspClient ocspClient = new OcspClient(new Uri("https://ocsp.eme.lv/responder.eme"));                ocspClient.Verify = true;                OcspRequest ocspRequest = new OcspRequest();                ocspRequest.Certs.Add(                    MakeCertID(cert)                    );                OcspResponse ocspResponse = ocspClient.QueryOcspServer(ocspRequest);                if (ocspResponse.Status == OcspResponseType.Good &&                     ocspResponse.Certs[0].RevocationStatus.Status == CertificateStatusType.Good)                {                    certificateOk = true;                }                else                {                    certificateOk = false;                }<br />Prasījām statusu tikai par vienu sertifikātu – tāpēc varam pārbaudīt tikai pirmo atbildi<br />        private CertID MakeCertID(X509Certificate2 subjectCertificate) // helpsbuildcertidneededbyfindingissuer        {            X509Chain chain = new X509Chain();            chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;            bool chainBuilt = chain.Build(subjectCertificate);            X509Certificate2 issuerCertificate = null;            foreach (var chainElement in chain.ChainElements)            {                if (chainElement.Certificate.Subject == subjectCertificate.Issuer)                    issuerCertificate = chainElement.Certificate;            }            return new CertID(issuerCertificate, new CertificateSerialNumber(subjectCertificate.SerialNumber.Replace("-", "")), <br />ObjectId.Sha1);        }<br />
  14. 14. Laika zīmogu serviss<br />3.<br />Pārbauda TSA atbildes parakstu<br />un TSA sertifikāta derīgumu<br />(AIA, CRL/OCSP, <br />paraksta pārbaude)<br />2.<br />Saņem TSA atbildi<br />1.<br />Autentificējas, <br />pieprasa laika zīmogu<br />Parakstītājs<br />Atbildes statuss<br />TSA paraksts<br />{TSA sertifikāts}<br />Dokumenta hash<br />Dokumenta hash<br />Datums un laiks<br />TSP (over HTTPS)<br />Laika zīmogu serviss<br />
  15. 15. Demo<br />Laika zīmoga pieprasīšana<br />
  16. 16. Laika zīmoga pieprasīšana<br />Palīgmetode lūdz lietotājam izvēlēties klienta autentifikācijas sertifikātu<br />                TsaClient client = new TsaClient(new Uri("https://tsa.eme.lv/responder.eme"));                X509Certificate2 authCertificate = GetCertificate();                if (authCertificate != null)                {                    client.ClientCert = authCertificate;                    TsaRequest request = new TsaRequest();                    request.CertificateRequired = true;                    request.Imprint = new TsaMessageImprint(new SHA1Managed().ComputeHash(signature));                    TsaResponse response = client.QueryTsaServer(request);                    if ((response.ResponseType == TsaResponseType.Granted || response.ResponseType == TsaResponseType.GrantedWithMods))                    {                        timestampTextBox.Text = string.Format("Timestamp issued. Time = {0}", response.SignedData.Time.ToString());                    }                    else                    {                        timestampTextBox.Text = string.Format("TsaResponseType = {0}, TsaFailureType = {1}", <br />response.ResponseType.ToString(), response.FailureType.ToString());                    }                }<br />Atbildē pieprasām iekļaut TSA sertifikātu<br />   <br />Paraksts, kuru zīmogosim (baitu masīvs, kas izveidots, parakstot)<br />
  17. 17. Sertifikātu meklēšana direktorijā<br />3.<br />Nolasa nepieciešamos <br />atribūtus (sertifikātu)<br />un šifrē nosūtāmo ziņojumu<br />2.<br />Saņem LDAP atbildi<br />1.<br />Nosūta meklēšanas<br />pieprasījumu<br />Šifrētājs<br />Saraksts ar atrastajiem elementiem<br />Base:<br />c=lv<br />Query:<br />(&(givenName=Aldis) (sn=Viļums))<br />Attributes:<br />Nolasāmo atribūtu saraksts<br />LDAP v3<br />Sertifikātu direktorijs<br />
  18. 18. Sertifikātu direktorija struktūra<br />C = LV <br />O = E-ME<br />OU = Sertifikācijas pakalpojumu daļa<br />CN = E-ME PSI (PCA)<br />LDAP objektu klase inetOrgPerson<br />CN = E-ME SI (CA1)<br />UID=<sertifkāta seriālais #><br />UID=<sertifkāta seriālais #><br />CN = E-ME SSI (RCA)<br />
  19. 19. Personas sertifikāta ieraksta informācija<br />
  20. 20. Demo<br />Informācijas meklēšana LDAP<br />
  21. 21. Informācijas meklēšana LDAP<br />   <br />                LdapDirectoryIdentifier ldapId = new LdapDirectoryIdentifier("eme.lv", false, false);                SearchRequest searchRequest = new SearchRequest(                    "c=lv", // base path to search from                     "(&(givenName=Janis)(sn=Berzins))", // filter string to search for entries having name Janis and surname Berzins                    System.DirectoryServices.Protocols.SearchScope.Subtree, // search in the whole subtree under c=lv                    "cn", "givenName", "sn", "serialNumber", "uid", "mail", "o", "ou", "userCertificate" // get these attributes                    );                                LdapConnection ldapConn = new LdapConnection(ldapId, null, AuthType.Anonymous); // use anonymous connection                ldapConn.SessionOptions.ProtocolVersion = 3;                                SearchResponse response = (SearchResponse)ldapConn.SendRequest(searchRequest);                foreach (SearchResultEntry resultEntry in response.Entries)                {                    Console.WriteLine("   {0} ", resultEntry.DistinguishedName);                    // print out basic information                    foreach (string attributeName in resultEntry.Attributes.AttributeNames)                    {                        if (resultEntry.Attributes[attributeName].Count > 0)                        {                            string attributeValue = (string)(resultEntry.Attributes[attributeName].GetValues(typeof(string))[0]);                            if (attributeName.ToLowerInvariant() != "usercertificate")                                Console.WriteLine("    {0}: {1} ", attributeName, attributeValue);                        }                    }                    // code below shows how to get a certificate                    byte[] fileContents = (byte[])(resultEntry.Attributes["userCertificate"].GetValues(typeof(byte[]))[0]);                    Console.WriteLine(Convert.ToBase64String(fileContents));                }<br />

×