X.509証明書の拍車

怪物は、いたずら、巨大、厳しく、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, -- If present, version MUST be v2 or v3
      
      





表記法と構文を完全に理解するには、 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証明書が実際にどのようなものであるかを見てみましょう。 食べ物 信頼の連鎖。









程度によって 急勾配 高コストで信頼性の高い証明書は、 DVOVEVの 3つのタイプに分けられます。









誰が喜んでそれを分岐しますか。 Offhand、Yandex、StackOverflow.com、Habrは、それなしでも生き続けられます。 ただし、このために犠牲を払う意思がある人は、次の要件を満たす必要があります。







  1. 組織の法的、物理的および運用上の活動の監査。
  2. 組織がドメイン名を使用する排他的な権利を持っていることを確認してください。
  3. 組織がこのタイプの証明書を発行する権限を持っていることを確認してください。


詳細については、 TutHostのHabrapospを参照してください。 また、証明書のsubject



属性X.509 EVには、値jurisdictionOfIncorporationCountryName



businessCategory



、およびserialNumber



が含まれています。







証明書のプロパティにより、証明書には次の種類があります。









ロシアでは、 資格証明書の COPの概念は、国家サービスへのアクセスに関連する法律によって定義されています。 COPからの個人データの抽出に関する叙事詩Habrapostとリンクによる







証明書はどこから来たのですか?



最近では、X.509証明書を取得する方法は2つしかありませんでしたが、時代は変わりつつあり、最近では3つ目の方法があります。







  1. 独自の証明書を作成して、自分で署名します。 長所-それは無料、短所-証明書はあなたと、せいぜいあなたの組織によってのみ受け入れられます。



    信頼されていません
  2. CAから証明書を購入する 上記のさまざまな特性と機能に応じて費用がかかります。
  3. 無料の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: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 30 95 58 E3 9E 76 1D FB 92 44 9D 95 47 94 E4 97 0.X..v...D..G... 0010: C8 1E F1 92 .... ] ]
      
      





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
      
      





Novell証明書チェーン







ルート証明書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
      
      





使用材料






All Articles