SSL証明書を取得したけど、手続きは難解だし、途中でも様々な用語が出てくるしで解かりづらかった。
認証局(CA:Certification Authority)
主な役割は「電子証明書の発行と失効」。
パブリック認証局
パブリック認証局のルート証明書は、一般的なウェブブラウザやメールソフトにあらかじめ組み込み済み。
そのため、ルート証明書の配布やインストールが不要。
プライベート認証局
事業会社などが独自に設立。
ルート証明書の配布や設定などに手間が掛かかる。
社内だけなど、限られたネットワークで電子証明書を利用する場合、使うことができる。
3階層の証明書と、中間CA証明書
3階層で証明書を検証する仕組み。(4階層というのもある)
1階層目:ルート証明書(パブリック認証局であれば、ブラウザ等に既に組み込まれている)
2階層目:中間CA証明書
3階層目:サーバ証明書
下位2階層の証明書をサーバーに設定する必要がある。
SSL証明書について
SSL証明書の種類(別名:認証タイプ、認証レベル)
クイック認証SSL(別名:ドメイン認証、ドメイン認証型、DV、Domain Validation)
認証レベル: 低
個人による取得: ○
アドレスバー表示: ブラウザのアドレスバーに鍵マーク
認証項目: ドメイン名の使用権
特徴: 低価格、スピード発行、個人事業主の取得可
企業認証SSL(別名:企業実在認証、実在証明型、OV、Organization Validation)
認証レベル: 中
個人による取得: ☓
アドレスバー表示: ブラウザのアドレスバーに鍵マーク
認証項目: ドメイン名の使用権、組織の法的実在性
特徴: 証明書情報に組織名。ウェブサイトの信頼性アップ
EV SSL(別名:EV認証、EVタイプ、EV、Extended Validation)
認証レベル:高
個人による取得:☓
アドレスバー表示:アドレスバー・鍵マークが緑。運営組織名が表示
認証項目:ドメイン名の使用権、組織の法的・物理的実在性、組織の運営、承認者・署名者の確認
特徴: アドレスバーに組織名、フィッシング詐欺対策
サービス、オプションの種類
マルチドメインSSL
複数の別ドメインサイトを1枚のSSL証明書でSSL暗号化通信を実現させる。
ワイルドカードSSL
対象の認証タイプ:クイック証明SSL、企業認証SSL
複数のサブドメインサイトを1枚のSSL証明書で暗号化通信を実現させる。
※証明書が「.example.com」に発行されている場合、「https://example.com/」でも利用可能です。
※証明書が「.example.com」に発行されている場合、「https://www.sub.example.com/」にアクセスすると警告が表示されます。
「www.」有り無し対応『2way』
証明書お申し込み時に「www.example.com」のようなwww.で始まるコモンネームを申請をされた場合、「example.com」といったwww.が付かないURLへのSSLアクセスにも対応可能です。
※クイック認証SSLのお申し込み時に「www.example.com」のコモンネームで申請をされた場合、審査時に「example.com」のドメインで審査すると2wayが適用されます。 「www.example.com」のFQDNで審査した場合は、2wayが適用されないため、審査した「www.example.com」のFQDNでのみ利用可能となります。
https://jp.globalsign.com/service/ssl/feature/?id=basicservice
同一コモンネームであれば、証明書のコピー利用OK
証明書コピー利用でコスト削減 追加ライセンス無償
グローバルサインのSSLサーバ証明書はコモンネーム(ディスティングイッシュネーム)ごとの課金のため、1ライセンス(1枚)ご購入いただくことで、同一コモンネームであれば無制限にインストールして同時に利用することが可能です。負荷分散のための複数台サーバ構成やクラウド環境など、サーバが増設することが想定される環境においても、その都度証明書を追加購入する必要がありません。
https://jp.globalsign.com/support/faq/67.html
https://jp.globalsign.com/support/faq/74.html
CSR
CSRとは
Certificate Signing Request(証明書サイン要求)の略。
DN情報や生成時に使用した公開鍵の情報が含まれている。
CSRの生成は証明書を利用するサーバー上で作成する方がよりいいらしい(?)
スキップ申込サービス(GlobalSignのみ)
https://jp.globalsign.com/service/ssl/feature/skip.html
スキップ申し込みを利用するための条件:
バックアップ
発行されるサーバIDは、CSR生成元のキーペアとの正しい組み合わせでのみ使用できる。
そのため、次の内容のバックアップが必要。
秘密鍵が流出するとSSLのセキュリティが保てなくなるため注意。
証明書更新時にCSR再作成は必要か
更新時に元のCSRファイルを使う事もできるが、セキュリティを考えると再作成した方がいい。
レンタルサーバ会社のルール、Microsoft IISなどのサーバによっては、CSRの更新を必須としている場合がある。
同じ情報で同じ手順でCSRを作成しても、二度と同一のCSRを作成することはできないらしい。
CSR作成に同じ秘密鍵を使うと、公開鍵も同じになってしまう。
秘密鍵も毎回作成するのがオススメらしい。
注意点
作成したCSRファイルに対して、公開鍵長やDN情報の変更はできない。
DNとは
Distinguished Name(識別されたネーム、ディスティングイッシュネーム)の略。
CSRに含まれている、特定の法人名やドメイン名をコード化した情報。
国名、州(郡)、地域(都市)、組織名、組織内の部署名、コモンネームが含まれる。
CSR生成メモ
秘密鍵の作成(パスフレーズあり)
パスフレーズなしで作成する方法もあるため、その方法の方がいい?
公開鍵長は「2048bit」を指定。1024bitではダメ。
$ openssl genrsa -des3 -out example.com.key.pem 2048
パスフレーズを削除
$ openssl rsa -in example.com.key.pem -out example.com.key_np.pem
CSRを生成
$ openssl req -new -key example.com.key_np.pem -out example.com.csr.pem Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:都道府県名。例:Tokyo Locality Name (eg, city) []:市区町村名。東京の場合は区名。例:Minato-ku Organization Name (eg, company) [Internet Widgits Pty Ltd]:組織名や会社名。例:Cybertrust Japan Co.,Ltd. Organizational Unit Name (eg, section) []:組織内の部署名。例:Technical Division Common Name (e.g. server FQDN or YOUR name) []:例:*.example.com Email Address []:空白のまま Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:空白のまま An optional company name []:空白のまま
SSL証明書発行/更新
発行/更新手続き(GlobalSignの場合)
SSL証明書発行時のメールで送られてくる情報
- コモンネーム
- 証明書 SHA256
-----BEGIN CERTIFICATE-----
(X.509 証明書データ)
-----END CERTIFICATE----- - 中間CA証明書
-----BEGIN CERTIFICATE-----
(X.509 証明書データ)
-----END CERTIFICATE----- - 証明書+中間証明書(PKCS7形式) SHA256。IISの場合に使用する。
-----BEGIN PKCS7-----
(PKCS7形式の証明書データ)
-----END PKCS7-----
更新時したときの新しい証明書の有効期限(GlobalSignの場合)
他の会社で行ったことがないので、GlobalSignで発行した証明書をGlobalSignで更新したケースのみ記載。
有効期間開始日:発行日時
有効期間終了日:終了日時から1年後(1ヶ月追加のオプションを選択していれば、更に1ヶ月後)
AWSでSSL証明書を扱う方法
次の3種類の方法がある。
- 自分で取得したSSL証明書を IAM にアップロード
- 自分で取得したSSL証明書をAWS Certificate Manager(ACM)にアップロード
- AWS Certificate Manager(ACM)で無料DV証明書(制約あり)を発行
無料DV証明書の特徴、制約
- CloudFront, ELB(ALB含む)のみ使用可能。
- 無料
- 自動更新
- マルチドメイン、ワイルドカード対応
- 認証レベルはDVのみ
- 証明書の認証局(CA)はAmazon
- CloudFrontで使える証明書は、us-east-1リージョンに登録されている証明書のみ。
- ELBで使える証明書は、ELB設置リージョンに登録されている証明書のみ。
ACMで管理するメリット
IAM と比べてどういうメリットがあるのか確認してみました。
証明書の更新が一括で行える どのリソースで使われているかが一目でわかる 使われていない証明書を確認・削除できる
一番のメリットは証明書の更新が圧倒的に楽になることでしょう。これまでの IAM 方式だと、新しい証明書を IAM にアップロードし、その証明書を使っている ELB や CloudFront の設定をひとつひとつ変更する必要がありました。その証明書がどこで使われているか把握していないと更新し忘れる可能性があります(ELB が何十個もあると更新するのもひと苦労です…)。
https://blog.manabusakai.com/2016/10/acm-import-certificate/
自分で取得したSSL証明書をAWS Certificate Manager(ACM)にアップロードする場合の注意点
ACM はインポートされた証明書にマネージド型更新 を提供しません。
重要
インポートした証明書の有効期限をモニタリングし、失効する前に更新する責任はお客様に帰します。期限切れの証明書と同じ ARN を持つ新しい証明書をインポートすると、新しい証明書で古い証明書が置き換えられます。さらに、ACM は新しい証明書を古い証明書と同じサービスおよびリソースに関連付けます。
インポートした証明書を更新するには、発行者から新しい証明書を取得して ACM にインポートするか、または ACM から新しい証明書をリクエスト することもできます。
http://docs.aws.amazon.com/ja_jp/acm/latest/userguide/import-certificate.html
AWS Certificate Manager
証明書のインポート
証明書本文: SSL証明書(PEM形式)
証明書のプライベートキー: CSR作成に使用した秘密鍵(PEM形式)
証明書チェーン: 中間CA証明書(PEM形式)
余計な空白や改行があると失敗する(失敗した。。。)
インポートした証明書を使ったときにハマったところ
Elastic Beanstalkで使う場合、インポートしたSSL証明書は .elasticbeanstalk.com に適用できず、アクセスできない。
(AMIで設定したSSL証明書を使った場合は、 .elasticbeanstalk.com にアクセスできたため、謎。)
その他
拡張子と内容について
拡張子.pem
PEM(Privacy Enhanced Mail)と呼ばれる形式。
.pemという拡張子は鍵の中身じゃなくて、エンコーディングを表している。
Base64によってテキスト化されている。
証明書をファイルに保存して取り扱うことが比較的多い。
ヘッダ「-----BEGIN XX -----」とフッタ「-----END XX-----」で囲われているので、XXの部分で内容を区別できる。
CSR
「—–BEGIN CERTIFICATE REQUEST—–」、「—–END CERTIFICATE REQUEST—–」で囲われている。
よく使われる拡張子は「.csr」「.txt」
秘密鍵
「—–BEGIN RSA PRIVATE KEY—–」、「—–END RSA PRIVATE KEY—–」で囲われている。
よく使われる拡張子は「.key」「.txt」
証明書(公開鍵)
「—–BEGIN CERTIFICATE —–」、「—–END CERTIFICATE—–」で囲われている。
よく使われる拡張子は「.crt」「.cer」「.cert」「.ca」「.txt」。
中間証明書の場合は「.ca-bundle」もある。
オススメのファイル名
ファイル名も拡張子も特に決まりがない。コモンネームを含めた方がわかりやすいらしい。
- 秘密鍵 example.com.key.pem
- CSR example.com.csr.pem
CT
Certificate Transparencyの略。
Google 社により考案され、2013 年に「RFC 6962」として規格化。
CTログサーバに発行した証明書を登録することで、証明書発行の「透明性」を確保する仕組み。
SCT
Signed Certificate Timestamp(署名付き証明書タイムスタンプ)の略
CTログサーバに証明書を登録した際に、発行してもらえるタイムスタンプ。