æªç©ã¯ãããããã巚倧ãå³ãããharãã ã
ç§ãã¡ãSSL蚌ææžãšç¿æ
£çã«åŒãã§ããäžé£ã®æè¡ã¯éåžžã«å€§ããªæ°·å±±ã§ããããã®äžã«ã¯ãã©ãŠã¶ã®ã¢ãã¬ã¹ããŒã®ãã¡ã€ã³åã®å·ŠåŽã«ç·è²ã®ããã¯ããããŸãã æ£ããååã¯X.509
ã§ã X.500
æšæºã®ITU-T DAP (Directory Access Protocol)
æ»ããŸãã DAPã¯é¢éžãããIETFã§ããããã¹ãŠã®OSIãã€ã«ã§äœ¿çšããã«ã¯äžäŸ¿ã§ãããšèŠãªããã代ããã«ãæåã®æåãã軜éããæå³ããLDAPãLightweight DAPãæãä»ããŸããã ãã¥ãŒãã³ã°ããå¿
èŠããã人ããŸãã¯ãããã°ããã®ãããã«æªã人ã¯ãç®èãååã«ç解ã§ããŸãã SNMPãé€ããç¥èªã®æåã®æåãåãã€ããããšã¯ãããŸããã

ãšããã§ãLDAPãSNMPãããã³X.509ã«ã¯ããã¡ã³ã¹ã¿ãžã¢ã ãããã«çµã¿ç«ãŠãå¿
èŠããªããšããäºå®ã«å ããŠãå
±éç¹ã¯äœã§ããïŒ ãããã¯ãå€ä»£ã®ãªããžã§ã¯ããèšè¿°ããããã®ã¡ã¿èšèªã§ããASN.1ã«ãã£ãŠçµåãããŠããŸãã ãããã®ãã¯ãããžãŒãçŸåšäœæãããŠããå Žåã XMLãDTDããŸãã¯ä»ã®MLã䜿çšãããŸãã ããããåœæãæšæºã¯ã¿ã€ã¿ã³ã«ãã£ãŠäœæãããSNMPã§ãããåçŽãªåé¡ã§ããã
èªåœ
X.509蚌ææžã®å®çŸ©ã¯ITU-Tã¢ãŒã«ã€ãã«ãããŸã
Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signatureValue BIT STRING } TBSCertificate ::= SEQUENCE { version [0] EXPLICIT Version DEFAULT v1, serialNumber CertificateSerialNumber, signature AlgorithmIdentifier, issuer Name, validity Validity, subject Name, subjectPublicKeyInfo SubjectPublicKeyInfo, issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
è¡šèšæ³ãšæ§æãå®å
šã«ç解ããã«ã¯ã ASN.1ã®å®å
šãªèª¬æããã2008幎çã®X.680ä»æ§ãèªãå¿
èŠããããŸãã ASN.1ã«é¢ããŠã¯ã SEQUENCE
ã¯Cã®struct
ãšã»ãŒåãããšãæå³ããŸãã ã»ãã³ãã£ã¯ã¹ã«ããé
åã«å¯Ÿå¿ããå¯èœæ§ãé«ããããããã¯æ··ä¹±ãæãå¯èœæ§ããããŸãã ããã«ããããããã
X.690æšæºã¯ã ASN.1ã«åŸã£ãŠäœæãããããŒã¿æ§é ã«å¯ŸããŠã BER
ïŒåºæ¬ãšã³ã³ãŒãèŠåïŒã CER
ïŒæšæºãšã³ã³ãŒãèŠåïŒã DER
ïŒèå¥ãšã³ã³ãŒãèŠåïŒã®ãšã³ã³ãŒãèŠåãå®çŸ©ããŠããŸãã XER
ïŒXML Encoding RulesïŒããããŸãããå®éã«ã¯ç§ã¯äŒã£ãããšããããŸããã
ã¯ããããããã©ãããŠãããªã«é çã®çš®ã«ãªãX.509蚌ææžãå¿
èŠãªã®ã§ããïŒ X.509蚌ææžã®æåã®äž»ãªæ©èœã¯ã å
¬éãŸãã¯å
¬éã㌠PKIïŒå
¬éããŒåºç€ïŒã®ãªããžããªãšããŠæ©èœããããšã§ãã ãã®æ©èœã«é¢ããèŠæ
ã¯ãããŸãããã2çªç®ã®æ©èœã§ã¯ãã¹ãŠãæ確ã§ã¯ãããŸããã
X.509蚌ææžã®2çªç®ã®æ©èœã¯ãææè
ãããžã¿ã«è³ç£ã®çã®ææè
ãšããŠäººãŸãã¯ããã°ã©ã ã«åãå
¥ããããããšã§ãããã¡ã€ã³åããŠã§ããµã€ããªã©ãããã¯ç°ãªãæ¹æ³ã§è¡ãããŸããéèçšèªã䜿çšããŸãã 6ãæåãGoogleã¯30,000ã®å€±æãã蚌ææžãçºè¡ãããšããäºå®ã«ããã蚌ææžãä¿¡é Œããªããªããš Simantec瀟ãè
ããŸããã
蚌ææžã®åœåæ³
X.509蚌ææžãå®éã«ã©ã®ãããªãã®ã§ããããèŠãŠã¿ãŸãããã é£ã¹ç© ä¿¡é Œã®é£éã
- ã«ãŒã蚌ææž -ã«ãŒãCAïŒèªèšŒå± ïŒã§äœæããã次ã®å±æ§ããããŸã
basicConstraints
å±æ§ãšsubject
å±æ§ã¯åäžã§ããã basicConstraints
æ¡åŒµæ©èœã§ã¯ã basicConstraints
å±æ§ã¯å€TRUE
åããŸãã - äžé蚌ææž -ã«ãŒãCAã«ãã£ãŠçœ²åãããŠããªã蚌ææžã®ãããŸããªçšèªã ã«ãŒã蚌ææžããå§ãŸããæçµãµããžã§ã¯ãã®èšŒææžã§çµãããä»»æã®é·ãã®ãã§ãŒã³ã圢æã§ããŸãã
- ãšã³ããšã³ãã£ãã£èšŒææžã¯ ããã©ã€ããŒãããŒã§ä»ã®äžé蚌ææžã«çœ²åã§ããªããã§ãŒã³å
ã®ãšã³ãã¬ãã«ã®èšŒææžã§ãã
çšåºŠã«ãã£ãŠ æ¥åŸé
é«ã³ã¹ãã§ä¿¡é Œæ§ã®é«ã蚌ææžã¯ã DV ã OV ã EVã® 3ã€ã®ã¿ã€ãã«åããããŸãã
- DV-ãã¡ã€ã³å蚌ææžã®èšŒææžã¯ç°¡åã«å
¥æã§ããŸãã ãããã¯ãèªèšŒå±ãç³è«è
ã«ãã¡ã€ã³åã«å¯Ÿããæš©å©ãããããšã確èªããåŸãèªåçã«å³åº§ã«çºè¡ãããŸãã ã»ãšãã©ã®å Žåãã¡ãã»ãŒãžãéããŠãªã³ã¯ããã©ãã ãã§ãã åœç¶ãã¡ãã»ãŒãžã¯èªèšŒãããã¹ããã¡ã€ã³åãšãšãã«ã¡ãŒã«ããã¯ã¹ã«éä¿¡ãããŸãã
- OV-蚌ææžã¯ãã§ã«ãã¡ã€ã³åã§ã¯ãªããç³è«è
çµç¹èªäœã®ååã瀺ããŠããŸãã èªåé³å£°åºåã¯ãªããªããŸãããæ°å¶æ¥æ¥ããããŸãã æ€èšŒã®å¯Ÿè±¡ã¯ãç³è«è
ã®çµç¹ã®ååã®
whois
ããŒã¿ããŒã¹å
ã®ååšã§ãã å·ã®ç»é²ãšé»è©±çªå·ã®æå¹æ§ã確èªã§ããŸãã - EV-ãããã®èšŒææžãååŸããããšã¯é£ãããå®äŸ¡ã§ã¯ãããŸããã ãããã¯ãã¢ãã¬ã¹ããŒããã«ã®ç·è²ã®ããã¯ã«ããçµç¹ã®ååã§èå¥ã§ããŸãã

誰ãåãã§ãããåå²ããŸããã OffhandãYandexãStackOverflow.comãHabrã¯ããããªãã§ãçãç¶ããããŸãã ãã ãããã®ããã«ç ç²ãæãææããã人ã¯ã次ã®èŠä»¶ãæºããå¿
èŠããããŸãã
- çµç¹ã®æ³çãç©ççããã³éçšäžã®æŽ»åã®ç£æ»ã
- çµç¹ããã¡ã€ã³åã䜿çšããæä»çãªæš©å©ãæã£ãŠããããšã確èªããŠãã ããã
- çµç¹ããã®ã¿ã€ãã®èšŒææžãçºè¡ããæš©éãæã£ãŠããããšã確èªããŠãã ããã
詳现ã«ã€ããŠã¯ã TutHostã®Habrapospãåç
§ããŠãã ããã ãŸãã蚌ææžã®subject
å±æ§X.509 EVã«ã¯ãå€jurisdictionOfIncorporationCountryName
ã businessCategory
ãããã³serialNumber
ãå«ãŸããŠããŸãã
蚌ææžã®ããããã£ã«ããã蚌ææžã«ã¯æ¬¡ã®çš®é¡ããããŸãã
- ãã«ããã¡ã€ã³èšŒææž -蚌ââææžã¯
subjectAltName
SAN
å±æ§ã䜿çšããŠè€æ°ã®ãã¡ã€ã³åã«ãŸãããããšãã§ããŸãã - ãã«ããã¹ã蚌ææž -
subject
å±æ§ã«CN=example.net
ã¬ã³ãŒããå«ãŸããå ŽåãDNSãµãŒããŒã¯ãåäžã®ãã¹ãåãè€æ°ã®IPã¢ãã¬ã¹ã«å¯Ÿå¿ã§ããã¿ã€ãã®è€æ°ã®A / AAAA
ããšãã§ããŸãã ãã®å Žåãåãhostname
æã€X.509蚌ææžããã®ãããªãã¹ãŠã®ããŒãã«æ£åžžã«åŸ©å
ã§ããŸãã - ã¯ã€ã«ãã«ãŒã蚌ææžãã¯ã€ã«ãã«ãŒã蚌ææž -ããã¯ã
subject
å±æ§ã«CN=*.example.net
ãšã³ããªãå«ãŸããå Žåã§ãã éåžžã®æ£èŠè¡šçŸãšåãããã«æ©èœããŸããã€ãŸãããã¹ãŠã®*.example.net
ãµããã¡ã€ã³ã§äœ¿çšã§ããŸãã - èªå®ããã蚌ææž -RFC 3739ã¯ããã®çšèªãå人蚌ææžãåç
§ãããã®ãšããŠå®çŸ©ãã 欧å·é£åé»å眲åæ什ãåç
§ããŠããŸãã ç¹ã«ãRFCã¯
subject
å±æ§ã«å€ãå«ããããšãèš±å¯ããŠããŸãã
- commonNameïŒCN =ïŒã
- givenNameïŒGN =ïŒã
- ä»®å=ã
ãŸãã subjectDirectoryAttributes
ã¯æ¬¡ã®å€ãå«ãŸããŸãã - dateOfBirth =ã
- placeOfBirth =ã
- æ§å¥=ã
- countryOfCitizenship =ã
- countryOfResidence =ã
ãã·ã¢ã§ã¯ã è³æ ŒèšŒææžã® COPã®æŠå¿µã¯ãåœå®¶ãµãŒãã¹ãžã®ã¢ã¯ã»ã¹ã«é¢é£ããæ³åŸã«ãã£ãŠå®çŸ©ãããŠããŸãã COPããã®å人ããŒã¿ã®æœåºã«é¢ããåäºè©©Habrapostãšã®ãªã³ã¯ã«ãããš ã
蚌ææžã¯ã©ãããæ¥ãã®ã§ããïŒ
æè¿ã§ã¯ãX.509蚌ææžãååŸããæ¹æ³ã¯2ã€ãããããŸããã§ããããæ代ã¯å€ããã€ã€ãããæè¿ã§ã¯3ã€ç®ã®æ¹æ³ããããŸãã
- ç¬èªã®èšŒææžãäœæããŠãèªåã§çœ²åããŸãã é·æ-ããã¯ç¡æãçæ-蚌ææžã¯ããªããšãããããããªãã®çµç¹ã«ãã£ãŠã®ã¿åãå
¥ããããŸãã

- CAãã蚌ææžã賌å
¥ãã äžèšã®ããŸããŸãªç¹æ§ãšæ©èœã«å¿ããŠè²»çšãããããŸãã
- ç¡æã®LetsEncrypt蚌ææžãå
¥æããŠãã ãããæãåçŽãªDV蚌ææžã®ã¿ãå©çšå¯èœã§ãã
æåã®ã·ããªãªã§ã¯ãããã€ãã®ã³ãã³ãã§ååã§ããã2åèµ·ããªãããã«ã æ¥åæ²ç·ã¢ã«ãŽãªãºã ã䜿çšããŠèšŒææžãäœæããŸãã æåã®ã¹ãããã¯ãç§å¯éµãäœæããããšã§ãã æ¥åæ²ç·ã¢ã«ãŽãªãºã ã䜿çšããæå·åã¯ãCPUãµã€ã¯ã«ãŸãã¯ããŒã®é·ãã®ãã€ãã§æž¬å®ããå Žåã ãã倧ããªæ¶èããããããšèããããŠããŸãã ECCãµããŒãã¯ãTLS <1.2 ã§ã¯äžæã«å®çŸ©ãããŠããŸãã ã
openssl ecparam -name secp521r1 -genkey -param_enc explicit -out private-key.pem
次ã«ãCSR-蚌ææžçœ²åèŠæ±ãäœæããŸãã
openssl req -new -sha256 -key private.key -out server.csr -days 730
ãããŠããã«çœ²åããŸãã
openssl x509 -req -sha256 -days 365 -in server.csr -signkey private.key -out public.crt
çµæã¯æ¬¡ã®ã³ãã³ãã§è¡šç€ºã§ããŸãã
openssl x509 -text -noout -in public.crt
Openssl
ã«ã¯èšå€§ãªæ°ã®ãªãã·ã§ã³ãšã³ãã³ãããããŸãã ManããŒãžã¯ããŸã䟿å©ã§ã¯ãããŸãããããã¥ã¢ã«ã¯æ¬¡ã®ããã«äœ¿çšãããšäŸ¿å©ã§ãã
openssl -help openssl x509 -help openssl s_client -help
java
ãŠãŒãã£ãªãã£keytool
ã§ããŸã£ããåãããšãã§ããŸãã
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
owner
ãšissuer
ãã£ãŒã«ããèŠããŠããããã«ãäžé£ã®è³ªåãç¶ããŸã
What is your first and last name? What is the name of your organizational unit? What is the name of your organization? What is the name of your City or Locality? What is the name of your State or Province? What is the two-letter country code for this unit? Is CN=Johnnie Walker, OU=Unknown, O=Unknown, L=Moscow, ST=Moscow, C=RU correct?
ããŒãã§ãŒã³ãç¬èªã®åœ¢åŒããPKCS12ã«å€æããŸãã
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12
çµæãèŠãŠã¿ãŸãããïŒ
keytool -list -v -alias selfsigned -storepass password -keystore keystore.jks Alias name: selfsigned Creation date: 20.01.2018 Entry type: PrivateKeyEntry Certificate chain length: 1 Certificate[1]: Owner: CN=Johnnie Walker, OU=Unknown, O=Unknown, L=Moscow, ST=Moscow, C=RU Issuer: CN=Johnnie Walker, OU=Unknown, O=Unknown, L=Moscow, ST=Moscow, C=RU Serial number: 1f170cb9 Valid from: Sat Jan 20 18:33:42 MSK 2018 until: Tue Jan 15 18:33:42 MSK 2019 Certificate fingerprints: MD5: B3:E9:92:87:13:71:2D:36:60:AD:B5:1F:24:16:51:05 SHA1: 26:08:39:19:31:53:C5:43:1E:ED:2E:78:36:43:54:9B:EA:D4:EF:9A SHA256: FD:42:C9:6D:F6:2A:F1:A3:BC:24:EA:34:DC:12:02:69:86:39:F1:FC:1B:64:07:FD:E1:02:57:64:D1:55:02:3D Signature algorithm name: SHA256withRSA Subject Public Key Algorithm: 2048-bit RSA key Version: 3 Extensions:
ObjectId: 2.5.29.14
ã®å€ã¯ã RFC 3280ã«ãããšASN.1ã®å®çŸ©ã«å¯Ÿå¿ããåžžã«non-critical
ã§ã¯ãããŸããã åæ§ã«ãX.509蚌ææžã«ååšããä»ã®ObjectId
æå³ãšå¯èœãªå€ãèŠã€ããããšãã§ããŸãã
subjectKeyIdentifier EXTENSION ::= { SYNTAX SubjectKeyIdentifier IDENTIFIED BY id-ce-subjectKeyIdentifier } SubjectKeyIdentifier ::= KeyIdentifier
Letsencrypt
X.509 LetsEncrypt蚌ææžã¯ç¡æã§å
¥æã§ããŸãããŠã§ããµã€ãã«ã¢ã¯ã»ã¹ããå¿
èŠããªãã certbot
ã€ã³ã¹ããŒã«ããcertbot
ã§ãã
sudo emerge -av certbot # Gentoo sudo apt-get install certbot -t stretch-backports #Debian sudo dnf install certbot #Fedora sudo certbot certonly --standalone -d example.com -d www.example.com
ã·ããªãªïŒ1-æã®äžãã次ã®ãã®ãèŠã€ãã
蚌ææžãã³ãã« -è€æ°ã®X.509蚌ææžãåäžã®ãã¡ã€ã«ã«çµåããŸããã»ãšãã©ã®å Žåã PEM
圢åŒã§ãã ãã³ãã«ã¯ãSSL / TLSãã³ãã·ã§ã€ã¯ãããã³ã«ã®æç¹ã§ãããã¯ãŒã¯çµç±ã§éä¿¡ãããŸãã

ãžã¥ãŒã¹èªäœã¯ã certificate chain
蚌ææžãã€ãŸãcertificate chain
ãæ±ããšãã«å§ãŸããŸãã å€ãã®å Žåã jks
ããŒãã§ãŒã³ã®éººé¡ãèŠããšãããã€ãã®ãã¡ã€ã³åã®æ°ãã蚌ææžãšå€ã蚌ææžãå€æ°ããå Žåã«ã芪蚌ææžãèŠã€ããæ¹æ³ãèŠã€ããjks
ã¯ç°¡åã§ã¯ãããŸããã
*.novell.com
ã®*.novell.com
蚌ææžãæ€èšããŠãã ããã Authority Key Identifier (AKI)
æ¡åŒµã¯ããã³ãã«å
ã®å€ããã®ã®Subject Key Identifier (SKI)
äžèŽããå¿
èŠããããŸãã
Certificate Authority Key Identifier Size: 20 Bytes / 160 Bits 51 68 ff 90 af 02 07 75 3c cc d9 65 64 62 a2 12 b8 59 72 3b
SKI
ã SKI
DigiCert蚌ææžã«ã¯åãæå³ããããŸãã
Certificate Subject Key ID Size: 20 Bytes / 160 Bits 51 68 ff 90 af 02 07 75 3c cc d9 65 64 62 a2 12 b8 59 72 3b

ã«ãŒã蚌ææžAKI = SKI
ãããã³isCa=true
Certificate Basic Constraints Critical Is a Certificate Authority
ã·ããªãªïŒ2-subjectAltnNameãLukeã䜿çšãã
WikiãWordPressãCactiãªã©ã®WebãµãŒããŒã䜿çšããã¢ããªã±ãŒã·ã§ã³ãæ³åããŠãã ããã https
ã¢ã¯ã»ã¹ãæ§æããèªåã§èšŒææžã賌å
¥ãŸãã¯çæããŠçœ²åããŸããã ãã¹ãŠæ£åžžã«åäœããã¯ãã§ãããç·è²ã®ããã¯ã¯ãŸã ãããŸããã ãã©ãŠã¶ãŒFQDN
ãµãŒããŒã®FQDN
ã¢ãã¬ã¹ããŒã«ãªã¹ããããŠããhostname
ãäžèŽããªãããã蚌ææžãééã£ãèã«ãã£ãŠæºåããããšçã£ãŠããŸãã DNSãµãŒããŒãmars.domain.com
ãmars.domain.com
ãWebãµãŒããŒãvenus.domain.com
æ§æãããŠããããšãæã
èµ·ãããŸãã
管çè
ãå®ç§äž»çŸ©ã®ããã«ä¹è»ä»¥å€ã«å¿
èŠãªå Žåã圌ã¯ãã§ãã«ãŒãå¿
èŠã§ã-åæãããç·è²ã®ããã¯ããããŠsubjectAltName
ãå®çŸ©ããããšã«ãã£ãŠX.509蚌ææžãããçŽãå¿
èŠããããŸãã
openssl.cnf
ãéãã req
ã»ã¯ã·ã§ã³ã«æ¬¡ã®è¡ãè¿œå ããŸãã
[ alternate_names ] DNS.1 = example.com DNS.2 = www.example.com DNS.3 = mail.example.com DNS.4 = ftp.example.com
次ã«ã [ v3_ca ]
ã»ã¯ã·ã§ã³ã§æå®ããŸãã
subjectAltName = @alternate_names
ãããŠããã¹ãŠãéåžžã©ããã«è¡ãããç§å¯éµãäœæããŠèšŒææžã«çœ²åããŸãã
openssl genrsa -out private.key 3072 openssl req -new -x509 -key private.key -sha256 -out certificate.pem -days 730
䜿çšææ