プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • セキュリティ
  • 【セキュリティ】証明書の基本、サーバー証明書発行までの流れなど
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【セキュリティ】証明書の基本、サーバー証明書発行までの流れなど

12.28

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

仕組み

証明書には階層構造があり、証明書の位置する階層によって呼び方が変わります。

ルート証明書

最も上位層に位置する証明書です。「私が言う事は信頼できる」と自ら主張することが許されている認証局(ルート認証局)が発行した証明書です。VeriSignなどのルート認証局が発行してます。

ルート証明書は、パソコンやスマホ、タブレットなどの出荷時にプリインストールされています。なので、もし第三者があなたのPCに不正なルート証明書をインストールしたら信頼性が保たれなくなってしまいます。(不正なサイトにもアクセス可能になってしまう。)

ブラウザに登録されるルート証明書

プリインストールされたルート証明書はさらにブラウザによって取受選択されています。

ブラウザに登録されるルート証明書はブラウザのバージョンアップなどに伴って収受選択されています。ブラウザの機能で確認することは可能です。新たな証明書の追加や削除などがブラウザのアップデートと共に随時行われています。

中間証明書

ルート証明書とエンドエンティティ証明書の中間に位置する証明書です。

エンドエンティティ証明書

最も下位層に位置する証明書です。エンドエンティティ証明書として「サーバー証明書」や「クライアント証明書」があります。

認証局の種類

ルート認証局

公的な認証局や企業が運営してます。「WebTrust for CA」という厳正な監査基準に基づく審査を受けパスしている企業で、とても敷居は高いです。

  • VeriSign社
  • GeoTrust社
  • Cyber Trust社
  • Microsoft社
  • SAECOM社(日本)

下位の認証局

上位認証局に証明書を発行してもらうことでその信頼性を担保してます。

サーバー証明書(エンドエンティティ証明書)

サーバーの認証に用いる証明書です。最もよく使われる証明書で3階層になっています。

サーバー証明書の発行者は、「VeriSign Class 3 Extended Validation SSL SGC CA」で、ルート証明書、中間証明書ともに、発行者は「VeriSign Class 3 Public Primary Certification Authority - G5」です。

クライアントはあらかじめ証明書を保持しており、上位の認証局が発行した証明書が信頼されるとしている。

証明書の内容の確認

HTTPSで提供されているサイトを表示してアドレスバーの横の鍵マークを押下することでサーバー証明書を参照することが可能です。SSL通信の暗号スイートも確認できます。

証明書の構造(ファイル形式)

証明書の構造は標準化されていて代表的なものが、「X.509」です。DER形式でエンコードしバイナリ(der)として保存したり、BASE64形式でエンコードしてテキストファイル(pem)として保存したりします。

発行までの流れ

1.SSL/TLSサーバーで秘密鍵を生成する。

なお、負荷分散装置や、SSLアクセラレーターなどを使う場合は、それらで秘密鍵を生成します。

2.作成した秘密鍵を元に「CSR(Certificate Signing Request)」を作成し認証局に提出する。

CSRとは?

サーバー証明書を取得するために認証局に提出するランダムな文字列のことです。署名前証明書の情報で構成されていて、作成するときに入力します。(CNや組織名など)

3.認証局の審査を受ける。

与信データや、第三者機関のDB、電話番号への電話など各種プロセスを経ます。審査に通ったら認証局はサーバー証明書を発行して要求元に送信します。サーバー証明書もランダム文字列になります。

4.認証局から受け取ったサーバー証明書をSSL/TLSサーバーにインストールする。

使用する認証局によっては中間証明書も一緒にインストールします。

クライアント証明書(エンドエンティティ証明書)

クライアントの認証に用いる証明書です。基本的にはサーバー証明書と構成は同じだが、2階層であることが多い。(中間証明書が存在しない)

特定のクライアントにアクセスを絞るものでありかなり機密度が高いシステムしか導入はしないのが現実でしょう。

証明書の検証方法

初めに検証対象の証明書(エンドエンティティ証明書)を確認し、そのIssuerに記載された発行者の証明書を確認する。以下の確認をエンドエンティティ証明書→発行者の証明書まで実行する。

  • SubjectのDN(Distinguished Name)を確認する。
  • サーバー証明書の場合、CNがドメイン名に一致するか確認する。
  • 有効期限が切れてないか確認する。
  • 証明書のExtentions領域内に記載されている証明書の鍵の用途を確認する。
  • CRLやOCSPを使って証明書が失効していないことを確認する。
スポンサーリンク
  • 2021 12.28
  • miyabisan2
  • コメントを書く
  • セキュリティ
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 04.18

    【セキュリティ】「OAuth」、「Open ID Connect」について

  2. 2019 11.30

    【Web開発】ユーザー管理機能の設計や実装、認証設計の種類

  3. 2021 12.04

    【インフラ】The Twelve-Factor App(コンテナのベストプラクティス)、コンテナイメージ、Dockerfile、ECSタスクに対するセキュリティ対策

  4. 2022 01.10

    【セキュリティ】「脆弱性情報の収集」について

  5. 2018 07.19

    【セキュリティ】「SSO(シングルサインオン)」、「SAML」とは?

  6. 2021 12.29

    【セキュリティ】「暗号スイート」、「SSLハンドシェイク」について

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【セキュリティ】「メッセージ認証コード(MAC)」、「…

【セキュリティ】「暗号スイート」、「SSLハンドシェイ…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー