怪物は、いたずら、巨大、厳しく、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証明書が実際にどのようなものであるかを見てみましょう。 食べ物 信頼の連鎖。
- ルート証明書 -ルート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
結果を見てみましょう:
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
ルート証明書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