æªç©ã¯ãããããã巚倧ãå³ããã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
äœ¿çšææ