Lai izveidotu drošas lietojumprogrammas, jums jāapgūst tirdzniecības rīki. Lai palīdzētu jums iepazīties ar šiem jēdzieniem, es jūs iepazīstināju ar publiskās atslēgas kriptogrāfiju 1. daļā un paskaidroju, kā tā ļauj izvairīties no atslēgas apmaiņas problēmām, kas pavada slepeno atslēgu kriptogrāfiju. Es arī izpētīju attiecības starp uzticēšanos un publiskās atslēgas kriptogrāfijas mērogojamību un paskaidroju, kā sertifikāti un publiskās atslēgas infrastruktūra (PKI) ļauj uzticēties plašākā mērogā, nekā to var panākt publiskās atslēgas kriptogrāfija. Visbeidzot, es aprakstīju sertifikātus un sertifikātu ķēdes un paskaidroju, kā tās ir saistītas ar CA (sertifikātu iestādēm).
Ir pieejami daudz dažādu sertifikātu aromāti, tostarp SDSI (vienkārša izplatīta drošības infrastruktūra), PGP (diezgan laba privātums) un X.509. Šomēnes, lai vēl vairāk paplašinātu jūsu drošības vārdu krājumu, es aprakstīšu sertifikāta formātu, kas vada paketi un ir galvenā topošo PKI standartu sastāvdaļa: sertifikāts X.509.
Sertifikātos varat izlasīt visu sēriju:
- 1. daļa: Sertifikāti piešķir vērtību publiskās atslēgas kriptogrāfijai
- 2. daļa: iemācieties izmantot X.509 sertifikātus
- 3. daļa: Izmantojiet Java CRL un X509CRL klases
- 4. daļa: Klientu un serveru autentificēšana un sertifikātu ķēžu pārbaude
X.509 formāts detalizēti
Starptautiskā telekomunikāciju savienība (ITU) izstrādāja un publicēja X.509 sertifikāta formātu, kuru izvēlējās Interneta inženieru darba grupas (IETF) publiskās atslēgas infrastruktūras X.509 (PKIX) darba grupa. Ja akronīmi norāda uz spēku, X.509 viennozīmīgi ir spēcīgi sabiedrotie.
Izmantojot apzīmējumu ASN.1 (Abstract Syntax Notation One), X.509 standarts nosaka sertifikāta formātu. ASN.1 ir standartizēta valoda, kas abstraktus datu tipus apraksta neatkarīgi no platformas.
PKIX darba grupas publicētajā dokumentā "Interneta X.509 publiskās atslēgas infrastruktūra - sertifikāts un CRL profils" (skatiet saites resursus) aprakstīts X.509 sertifikāta formāts ASN.1 apzīmējuma izteiksmē. Tas ir aizraujoši lasāms, ja jūs interesē šāda veida lietas.
ASN.1 definētais datu tips, piemēram, sertifikāts, nav noderīgs, kamēr tas nevar viennozīmīgi definēt, kā attēlot datu tipa gadījumu kā bitu sēriju. Lai datu tipam piešķirtu šo funkcionalitāti, ASN.1 izmanto atšķirīgās kodēšanas kārtulas (DER), kas nosaka, kā unikāli kodēt jebkuru ASN.1 objektu.
Izmantojot X.509 sertifikāta ASN.1 definīcijas kopiju un zināšanas par DER, varat rakstīt Java lietojumprogrammu, kas lasīs un rakstīs X.509 sertifikātus un mijiedarbosies ar līdzīgām lietojumprogrammām, kas rakstītas citās programmēšanas valodās. Par laimi, visticamāk, nekad nevajadzēs saskarties ar tik lielām nepatikšanām, jo Java 2 Platform, Standard Edition (J2SE) ir iebūvēts atbalsts X.509 sertifikātiem.
X.509 par (gandrīz) neko
Visas ar sertifikātu saistītās klases un saskarnes atrodas paketē java.security.cert
. Tāpat kā citi Sun drošības API saimes locekļi, arī sertifikātu pakete tika veidota atbilstoši rūpnīcas paradigmai, kurā viena vai vairākas Java klases definē vispārēju saskarni pakotnes paredzētajai funkcionalitātei. Nodarbības ir abstraktas, tāpēc lietojumprogrammas nevar tās tieši noteikt. Tā vietā rūpnīcas klases eksemplārs izveido un atgriež abstrakto klašu konkrēto apakštipu gadījumus. Rūpnīcas paradigma apiet Java spēcīgo drukāšanu, bet pretī ļauj kodam darboties bez atkārtotas apkopošanas plašākā vidē.
The java.security.cert.Sertifikāts
un java.security.cert.CRL
abstraktās klases nosaka saskarni. Tie attiecīgi apzīmē sertifikātus un sertifikātu atsaukšanas sarakstus (CRL). The CertificateFactory
klase ir viņu rūpnīca.
The java.security.cert
pakete satur konkrētus Sertifikāts
un CRL
abstraktās klases: X509Sertifikāts
un X509CRL
klases. Šīs divas klases ievieš pamata sertifikāta un CRL funkcionalitāti, pēc tam paplašina to ar X.509 specifisko funkcionalitāti. Kad CertificateFactory
instance atgriež jebkuras klases instanci, programma var vai nu izmantot to tādu, kāda tā ir, vai tieši nodot to formā X.509.
Iekš java.security.cert
pakete, saskarne X509 pagarinājums
definē saskarni X.509 sertifikāta paplašinājumiem. Paplašinājumi ir neobligāti komponenti, kas nodrošina mehānismu sertifikātu veidotājiem, lai saistītu papildu informāciju ar sertifikātu. Piemēram, sertifikātā var izmantot KeyUsage
paplašinājums, lai norādītu, ka to var izmantot koda parakstīšanai.
The java.security.cert
Komplektā ietilpst arī pakalpojumu sniedzēja saskarnes (SPI) klase. A kriptogrāfijas pakalpojumu sniedzējs kas vēlas atbalstīt sertifikāta tipu, paplašina SPI. Java 2 ir aprīkots ar SPI X.509 sertifikātiem.
Apskatīsim detalizētāk klases un saskarnes java.security.cert
iepakojums. Īsuma labad es apspriedīšu tikai visnoderīgākās metodes. Lai iegūtu plašāku pārklājumu, es iesaku jums izlasīt Sun dokumentāciju. (Skatīt resursus.)
java.security.cert.CertificateFactory
Stāsts sākas ar java.security.cert.CertificateFactory
. The CertificateFactory
klasei ir statiskas metodes, kas rada a CertificateFactory
piemērs noteiktam sertifikāta tipam un metodes, kas no ievades straumē sniegtajiem datiem izveido gan sertifikātus, gan CRL. Es īsi aprakstīšu vissvarīgākās metodes, pēc tam paskaidrošu, kā šīs metodes izmantot, ģenerējot X.509 sertifikātus un CRL. Vēlāk rakstā es iepazīstināšu kodu, kas parāda metodes darbībā.
public static CertificateFactory getInstance (String stringType)
unpublic static CertificateFactory getInstance (String stringType, String stringProvider)
iedaļu un atgriež sertifikātu rūpnīcas instanci sertifikāta tipam, ko norādījisstringType
parametrs. Piemēram, ja vērtībastringType
ir virkne "X.509", abas metodes atgriezīsCertificateFactory
klase, kas piemērota klašu gadījumu izveidošanaiX509Sertifikāts
unX509CRL
. Otrā metode kā argumentu pieņem konkrēta kriptogrāfijas pakalpojumu sniedzēja nosaukumu un noklusējuma vietā izmanto šo pakalpojumu sniedzēju.publiskais galīgais sertifikāts generatorCertificate (InputStream inputstream)
Instantē un atdod sertifikātu, izmantojot datus, kas nolasīti no piegādātajiemInputStream
instancē. Ja straumē ir vairāki sertifikāti un straume atbalstaatzīme ()
unatiestatīt ()
operācijām, metode nolasīs vienu sertifikātu un straumi atstās novietotu pirms nākamā.publiskā galīgā kolekcija generatorCertificates (InputStream inputstream)
veic un atgriež sertifikātu kolekciju, izmantojot datus, kas nolasīti no piegādātajiemInputStream
instancē. Ja dotā straume neatbalstaatzīme ()
unatiestatīt ()
, metode patērēs visu straumi.publiskais galīgais KRL ģenerē CRL (InputStream inputstream)
Instantē un atgriež CRL, izmantojot datus, kas nolasīti no piegādātajiemInputStream
instancē. Ja straumē ir vairāk nekā viens CRL un tas atbalstaatzīme ()
unatiestatīt ()
operācijām, metode nolasīs vienu CRL un atstās straumi novietotu pirms nākamās.publiskā galīgā kolekcija generatorCRL (InputStream inputstream)
veic un atgriež KRL kolekciju, izmantojot datus, kas nolasīti no piegādātajiemInputStream
instancē. Ja dotā straume neatbalstaatzīme ()
unatiestatīt ()
,publiskā galīgā kolekcija generatorCRL (InputStream inputstream)
patērēs visu straumi.
Ir svarīgi saprast, kā rīkojas šīs četras metodes, ģenerējot X.509 gadījumus no datu plūsmas. Apskatīsim.
The generatorCertificate ()
un generēt CRL ()
metodes paredz, ka ievades straumes satur attiecīgi DER kodētos sertifikāta vai CRL attēlojumus.
Gan generatorCertificates ()
un generēt CRL ()
metodes paredz, ka ievades straumes saturā ir vai nu DER kodētu attēlojumu secība, vai arī PKCS # 7 (Publiskās atslēgas kriptogrāfijas standarts # 7) atbilstošs sertifikāts vai KRL kopa. (Saites skatiet resursos.)
java.security.cert.Sertifikāts
java.security.cert.Sertifikāts
definē interfeisu, kas ir kopīgs visiem sertifikātu veidiem: X.509, PGP un nelielai saitei citu. Šīs klases vissvarīgākās metodes ir:
publisks abstrakts PublicKey getPublicKey ()
atgriež publisko atslēgu, kas saistīta ar sertifikāta gadījumu, kurā tiek izsaukta šī metode.publisks abstrakts baits [] getEncoded ()
atgriež šī sertifikāta kodēto veidlapu.publiski abstrakts anulēt pārbaudīt (PublicKey publickey)
unpubliski abstrakta anulēta pārbaude (PublicKey publickey, String stringProvider)
pārbaudiet, vai privātā atslēga, kas atbilst piegādātajai publiskajai atslēgai, parakstīja attiecīgo sertifikātu. Ja taustiņi nesakrīt, abas metodes met aSignatureException
.
java.security.cert.X509Sertifikāts
Klase java.security.cert.X509Sertifikāts
pagarina Sertifikāts
klasi, kas aprakstīta iepriekš, un pievieno X.509 specifisku funkcionalitāti. Šī klase ir svarīga, jo jūs parasti mijiedarbojaties ar sertifikātiem šajā līmenī, nevis kā ar pamatklasi.
publisks abstrakts baits [] getEncoded ()
atgriež kodēto šī sertifikāta formu, kā norādīts iepriekš. Metode sertifikātam izmanto DER kodējumu.
Lielākā daļa java.security.cert.X509Sertifikāts
Papildu funkcionalitāte sastāv no vaicājumu metodēm, kas atgriež informāciju par sertifikātu. Lielāko daļu šīs informācijas es izklāstīju 1. daļā. Šeit ir metodes:
publisks abstrakts int getVersion ()
atgriež sertifikāta versiju.publisks abstrakts Galvenais getSubjectDN ()
atgriež informāciju, kas identificē sertifikāta priekšmetu.publisks abstrakts Galvenais getIssuerDN ()
atgriež informāciju, kas identificē sertifikāta izdevēju, kas parasti ir CA, bet var būt par tēmu, ja sertifikāts ir pašparakstīts.publisks kopsavilkums Datums getNotBefore ()
unpublisks kopsavilkums Datums getNotAfter ()
atgriešanās vērtības, kas ierobežo laika periodu, kurā emitents ir gatavs galvot par subjekta publisko atslēgu.publisks abstrakts BigInteger getSerialNumber ()
atgriež sertifikāta sērijas numuru. Sertifikāta izdevēja nosaukuma un sērijas numura kombinācija ir tā unikālā identifikācija. Šis fakts ir izšķirošs sertifikātu atsaukšanai, ko es sīkāk apspriedīšu nākamajā mēnesī.publiski abstrakta virkne getSigAlgName ()
unpubliski abstrakta virkne getSigAlgOID ()
atgriezt informāciju par sertifikāta parakstīšanai izmantoto algoritmu.
Šīs metodes atgriež informāciju par sertifikātam definētajiem paplašinājumiem. Atcerieties, ka paplašinājumi ir mehānismi informācijas sasaistīšanai ar sertifikātu; tie parādās tikai 3. versijas sertifikātos.
public abstract int getBasicConstraints ()
atgriež sertifikāta ierobežojumu ceļa garumu noBasicConstraints
pagarinājums, ja tas ir definēts. Ierobežojumu ceļš norāda maksimālo CA sertifikātu skaitu, kas var sekot šim sertifikātam sertifikācijas ceļā.public abstract boolean [] getKeyUsage ()
atgriež sertifikāta mērķi, kas ir kodētsKeyUsage
pagarinājums.public Set getCriticalExtensionOIDs ()
unpublic Set getNonCriticalExtensionOIDs ()
atgriezt objektu identifikatoru (OID) kolekciju paplašinājumiem, kas attiecīgi atzīmēti kā kritiski un nekritiski. OID ir veselu skaitļu secība, kas universāli identificē resursu.
Es negribu atstāt jūs bez koda, ar kuru spēlēt, tāpēc tā vietā, lai iedziļinātos KRL, kas pati par sevi ir pilnīga tēma, es uzrādīšu kodu un atstāšu KRL 3. daļai.
Kods
Šī klase parāda, kā iegūt sertifikātu rūpnīcu, kā izmantot šo rūpnīcu, lai ģenerētu sertifikātu no failā esošā DER kodētā attēlojuma un kā iegūt un parādīt informāciju par sertifikātu. Jūs pamanīsit, cik maz jums jāuztraucas par pamata kodējumu.