アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング SSL/TLS/PKI 基盤技術 設計技術

デジタル証明書のエンコードと拡張子の違い

投稿日:2020年10月25日 更新日:


デジタル証明書の種類と拡張子の理解が曖昧だったので整理してみました。

  • 証明書や鍵そのものは基本的にはバイナリデータです。
    これらのデータは、X.509やPKCSで仕様化されています。

    • X.509: 公開鍵証明書の標準形式や証明書パス検証アルゴリズムなどを定めている。
    • PKCS: RSAセキュリティテスト社が公開した公開鍵暗号標準である。
  • 証明書や鍵のファイルの拡張子は標準化されていませんが、次のように「DER/PEMといったエンコードの種類で分ける」「証明書/鍵等の対象の種類で分ける」のいずれかの場合が多いようです。
    対象 エンコードの種類で分ける 対象の種類で分ける
    証明書 .der
    (DER形式)
    .pem
    (PEM形式)
    .crt / .cer
    (DERまたはPEM形式)
    .key
    (DERまたはPEM形式)
    証明書と鍵のペア .pfx / .p12
    (PKCS#12形式)
    • .der, .pemは、どちらもASN.1というデータ構造で証明書や鍵を定義しています。
      この内容をシリアライズ(バイナリ化)したものがDER形式、BASE64化したものがPEM形式です。
    • .crtと.cerは拡張子の名前が異なるだけで、DER形式またはPEM形式になります。
      Windowsの証明書管理ツールだと.cerを使用しています。Linuxやapahce httpdでは.crtをよく見かけるように思えます。
    • .pfx, .p12は拡張子の名前が異なるだけで、どちらも証明書と鍵をパスワードで保護/暗号化するPKCS#12形式のファイルです。(ファイル内容を確認するためにはパスワード入力が必要。)
      なお、PFXはPKCS#12の古い名前だそうです。
  • DER形式の場合、ファイル内容はバイナリのため、そのままでは読めません。
    PEM形式の場合、次のようにBEGIN/ENDが含まれています。

    -----BEGIN CERTIFICATE-----
    MIIC7DCCAdSgAxIBAgIQQ+6X4ceH56VDoHRynd9CcjANBgklhkiG9w0BAQsFADAU
    ...
    CMP5Ilzzh1p3teyl2xkW46C4+P5zw7Jm8CMjWIIcwUU=
    -----END CERTIFICATE-----
    
    -----BEGIN PRIVATE KEY-----
    MIIEvgIBADANBakqhkiG9w0BAQEFAASCBKgwgaSkAgEAAoIBAQC/ckDQomsAiL0m
    ...
    z/Cwzzw9yorsiict15bfkCyO
    -----END PRIVATE KEY-----
    
  • Windows10環境での証明書と鍵の操作
    • Windows10付属のGUIツール
      • サインインしているユーザの証明書を管理する場合は「ユーザー証明書の管理」、
        PCの証明書を管理する場合は「コンピューター証明書の管理」を使用します。
      • [設定](Win + i)やタスクバーの検索ボックスで「証明書」と入力すると上記の2つが表示されるので、そこから起動できます。
      • [ファイル名を指定して実行](Win + r)で、”certmgr.msc“または”certlm.msc“を入力して起動することもできます。
    • Windows10 OS付属またはそれに準ずるコマンド
      • certutil.exe:
        証明書の検証や証明書ストアの管理を行うためのWindowsの標準コマンド。
        証明書や鍵の作成の機能は持っていないので、次のmakecertやNew-SelfSignedCertificate等を使う必要がある。
      • makecert.exe:
        証明書の作成や署名を行うためのコマンドラインツール。
        Windows SDKに含まれているコマンドで、SDKまたはVisual Studioのインストールで使用できるようになる。
        現時点で非推奨(deprecated)になっており、次のNew-SelfSignedCertificateが推奨される。
      • New-SelfSignedCertificate:
        自己署名証明書を作成するためのPowerShellコマンド。
        証明書を操作するためのその他のコマンドはリファレンスを参照のこと。
    • Windows上での鍵の管理はpfx形式(バイナリ)が前提のようで、現時点(2020年10月)では、標準コマンドを使ってPEM形式に変換できません。次のopenssl等のツールが別途必要になります。
    • より高度な証明書の操作を行う場合、openssl等のツールをインストールする必要があります。
      opensslはソースコードで公開されており、コンパイラを使ってビルドする必要があります。
      Windowsの場合、公式のものではありませんが、wikiからビルド済バイナリをダウンロードすることもできます。

      The OpenSSL project does not distribute any code in binary form, and does not officially recommend any specific binary distributions. An informal list of third party products can be found on the wiki.


(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, SSL/TLS/PKI, 基盤技術, 設計技術

執筆者:

関連記事

chromeのjavascriptを一時的に無効化

Webアプリの開発やテストで、クライアント側のバリデーションを無効にしてサーバ側バリデーションの動作確認する、等のように一時的にjavascriptを無効にしたい場合があります。これを実現するための方 …

疎通確認用pingツール

新人君たちと本番環境の構築作業でデータセンターに入り。 構築したサーバから、既存の重要なサーバへの疎通確認を行うために、pingを何度も入力する予定とのこと。 作業時間の短縮や間違いの低減のために、こ …

Apache HttpClientの通信内容をダンプ

アプリやミドルウェの動作の正常性確認や問題発生時の問題切り分けのために、HTTPリクエストやレスポンスのヘッダやボディを確認したい場合がある。Java系のアプリではApacheのHttpClientが …

ASP.NET Core: ファイルアップロードの考察

ASP.Net Core(3.1)を使ったファイルアップロードに関する考察です。 元ネタはマイクロソフトのサイトですが、記載内容が私には難しかったり、業務で使用するために悩む部分があったので独自に纏め …

DOSバッチリファレンス

ちょっとした事でbatファイルを作成することが多い。 そのたびにネット検索するのが非効率なため、リファレンス化しようと思う。 そういう目的なので、自分がよく調べる項目に絞っている。 開発時の注意点 直 …