1. ホーム
  2. 記事一覧
  3. 初心者向け!はじめてのOpenSSL インストールから証明書作成まで

2024.05.26

初心者向け!はじめてのOpenSSL インストールから証明書作成まで

1. はじめに

「証明書って何?」「OpenSSLを使えばいいと聞いたけど、、」とお悩みの皆さんへ。この記事では、初めてOpenSSLを使う方のために、基本的な使い方から証明書の作成方法までをわかりやすく説明します。暗号化通信の設定や証明書の取り扱いについて、スムーズに理解できるようサポートします。

OpenSSLとは?

OpenSSLは、暗号化通信を行うためのオープンソースのソフトウェアライブラリです。SSLやTLSプロトコルの実装を提供し、インターネット上での安全な通信を可能にします。簡単にいうと、OpenSSLはデジタル世界の鍵と錠前のようなもので、データを安全に保つためのツールです。

OpenSSLを使うメリット

  • 無料で利用可能

  オープンソースであるため、誰でも自由に利用できます。高価なソフトウェアを購入する必要がないので、コストを抑えて学習やプロジェクトに取り組むことができます。

  • 広範なサポート

    多くのプラットフォームで利用可能です。Windows、macOS、Linuxなど、どの環境でも使えるため、自分の使いやすい環境で学習を進められます。

  • 高い信頼性

    業界標準の暗号化技術を提供します。多くの企業や組織で利用されており、セキュリティに関する実績が豊富です。これを学ぶことで、自分のスキルを証明する大きな武器になります。

初心者向けのOpenSSL学習のポイント

  • 基本的なコマンド操作

    まずは基本的なコマンドから始めましょう。簡単な操作から少しずつ進めることで、徐々に理解を深めることができます。

  • 実践を通じた学習

    実際に手を動かして学ぶことが重要です。理論だけでなく、実際にコマンドを入力してみることで、理解が深まります。自分の手で証明書を作成したり、暗号化を試したりすることで、知識が定着します。

2. 環境構築

OpenSSLを始めるためには、まず環境を整える必要があります。このセクションでは、必要なものの準備からインストール手順までを説明します。

必要なもの

OpenSSLを使用するためにいくつかの必要なものを準備します。

  • コンピュータ

    Windows、macOS、またはLinux。

  • インターネット接続

    インストールパッケージのダウンロードに必要です。

インストール手順

各プラットフォーム(OS)別にインストール方法を説明します。

Windowsの場合

  1. 公式サイトからインストーラをダウンロードします。
  2. インストーラを実行し、指示に従ってインストールを完了します。

macOSの場合

  1. ターミナルを開き、Homebrewを使用してインストールします。
    brew install openssl
    • Homebrewがインストールされていない場合は、公式サイトの手順に従ってインストールしてください。

Linuxの場合

  1. ターミナルを開き、パッケージマネージャを使用してインストールします。
    sudo apt-get install openssl
    • 使用しているディストリビューションによってコマンドが異なる場合があります。例えば、CentOSでは次のようにします。
    sudo yum install openssl

動作確認

インストールが完了したら、以下のコマンドを実行してOpenSSLが正しくインストールされているか確認します。

openssl version

3. 基本操作

ここでは、OpenSSLの基本的な操作方法について説明します。初めて使う方向けに、よく使うコマンドの使い方や、それらのコマンドがどのように役立つかを学んでいきましょう。

ヘルプコマンド

OpenSSLの全てのコマンドを一覧表示し、それぞれのコマンドの目的や使用法を確認します。

openssl help

バージョン確認

インストールされているOpenSSLのバージョンを確認します。これは、使用しているバージョンが最新であることを確認するために重要です。

openssl version

暗号化・復号化

テキストを暗号化し、その暗号化されたテキストを復号化する方法を説明します。これにより、データの安全な保存や送信が可能になります。

暗号化

テキストデータをAES-256-CBCアルゴリズムを使って暗号化します。これは、データを第三者から守るために使用します。AES-256-CBCは非常に強力な暗号化アルゴリズムで、データを安全に保護するために広く使用されています。

echo "Hello, OpenSSL!" | openssl enc -aes-256-cbc -out encrypted.dat

復号化

暗号化されたデータを復号化します。これにより、暗号化されたデータを元の形式に戻すことができます。

openssl enc -d -aes-256-cbc -in encrypted.dat

ハッシュ計算

テキストのSHA-256ハッシュ値を計算します。ハッシュ値はデータの整合性を確認するために使用されます。ハッシュ値は一方向性であり、元のデータに戻すことはできません。暗号化とは異なり、ハッシュはデータを保護するためのものではなく、データが改ざんされていないかを確認するためのものです。

echo -n "Hello, OpenSSL!" | openssl dgst -sha256

4. 証明書作成

ここからは、OpenSSLを使用して証明書を作成する方法について学びます。証明書は、安全な通信を確立するために必要なもので、サーバーやクライアントの身元を証明します。以下の手順に従って、秘密鍵の生成から自己署名証明書の発行、CA証明書の作成までを実践してみましょう。

秘密鍵とは?

秘密鍵は、データを暗号化したり、デジタル署名を作成するために使用される秘密の鍵です。公開鍵と対になっており、秘密鍵は安全に保管する必要があります。

CSR(Certificate Signing Request)とは?

CSRは、証明書を発行するために認証局(CA)に提出するリクエストです。CSRには、公開鍵と申請者の情報が含まれています。簡単にいうと、CSRは「この公開鍵と情報を元に証明書を発行してください」とCAにお願いするための書類のようなものです。例えば、パスポートを申請する際に必要な書類のようなものです。CSRを作成する際には、以下の情報を入力する必要があります。

フィールド名説明
Country Name (C)国名を2文字の国コードで入力します。JP
State or Province Name (ST)都道府県名を入力します。Tokyo
Locality Name (L)市区町村名を入力します。Minato-ku
Organization Name (O)会社名や組織名を入力します。Example Corp
Organizational Unit Name (OU)部門名などを入力します。IT Department
Common Name (CN)サーバーのFQDN(完全修飾ドメイン名)を入力します。www.example.com
Email Address担当者のメールアドレスを入力します。admin@example.com

これらの情報を入力して、CSRを作成します。

openssl req -new -key private.key -out request.csr

CSRを作成する際の実行例です。

openssl req -new -key private.key -out request.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

-----
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] Example Corp
Organizational Unit Name (eg, section) [] IT Department
Common Name (e.g. server FQDN or YOUR name) [] www.example.com
Email Address [] admin@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password [] 
An optional company name [] 

上記のように入力が求められます。A challenge passwordAn optional company nameは追加の属性として入力が求められますが、これらは証明書のセキュリティや機能に直接関与しないため、通常は入力する必要はありません。特に必要がなければEnterキーを押して進めてください。

他に入力を求められることがある項目として、Subject Alternative Name (SAN)があります。これにより、1つの証明書で複数のドメイン名をサポートすることができます。これを指定するには、CSR作成時に設定ファイルを使用するのが一般的です。

自己署名証明書の発行

CSRを使用して自己署名証明書を発行します。自己署名証明書は、内部システムやテスト環境で使用されることが多いです。以下の情報を入力します。

フィールド名説明
Country Name (C)国名を2文字の国コードで入力します。JP
State or Province Name (ST)都道府県名を入力します。Tokyo
Locality Name (L)市区町村名を入力します。Minato-ku
Organization Name (O)会社名や組織名を入力します。Example Corp
Organizational Unit Name (OU)部門名などを入力します。IT Department
Common Name (CN)サーバーのFQDN(完全修飾ドメイン名)を入力します。www.example.com
Email Address担当者のメールアドレスを入力します。admin@example.com
Certificate Validity (days)証明書の有効期間を日数で入力します。365
openssl req -x509 -key private.key -in request.csr -out selfsigned.crt -days 365

CA証明書の発行

CA(Certificate Authority)証明書は、他の証明書を発行するための基盤となる証明書です。CA証明書を発行する手順を説明します。

CAの秘密鍵を生成

CAの秘密鍵を生成します。

openssl genpkey -algorithm RSA -out ca.key

CAの自己署名証明書を発行

CAの自己署名証明書を発行します。以下の情報を入力します。

フィールド名説明
Country Name (C)国名を2文字の国コードで入力します。JP
State or Province Name (ST)都道府県名を入力します。Tokyo
Locality Name (L)市区町村名を入力します。Minato-ku
Organization Name (O)会社名や組織名を入力します。Example Corp
Organizational Unit Name (OU)部門名などを入力します。IT Department
Common Name (CN)サーバーのFQDN(完全修飾ドメイン名)を入力します。www.example.com
Email Address担当者のメールアドレスを入力します。admin@example.com
Certificate Validity (days)証明書の有効期間を日数で入力します。3650
openssl req -x509 -key ca.key -out ca.crt -days 3650

5. 詳細設定による証明書作成(オプション)

このセクションは追加手順ですので、より便利に使いたいという場合に読み進めてください。

設定ファイルを使用したCSRの作成

詳細な設定が必要な場合、OpenSSLの設定ファイルを使用してフィールドを事前に保存することができます。これにより、毎回フィールドを入力する手間を省くことができます。

  1. 設定ファイル(例:csr_config.cnf)を作成します。

    [ req ]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
    prompt = no
    
    [ req_distinguished_name ]
    C = JP
    ST = Tokyo
    L = Minato-ku
    O = Example Corp
    OU = IT Department
    CN = www.example.com
    emailAddress = admin@example.com
    
    [ v3_req ]
    subjectAltName = @alt_names
    
    [ alt_names ]
    DNS.1 = www.example.com
    DNS.2 = example.com
  2. 設定ファイルを使用してCSRを作成します。

    openssl req -new -key private.key -out request.csr -config csr_config.cnf

設定ファイルを使用した自己署名証明書の作成

  1. 設定ファイル(例:selfsigned_config.cnf)を作成します。
    [

req ] distinguished_name = req_distinguished_name x509_extensions = v3_ca prompt = no

[ req_distinguished_name ]
C = JP
ST = Tokyo
L = Minato-ku
O = Example Corp
OU = IT Department
CN = www.example.com
emailAddress = admin@example.com

[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
```

2. 設定ファイルを使用して自己署名証明書を作成します。 bash openssl req -x509 -key private.key -out selfsigned.crt -days 365 -config selfsigned_config.cnf

設定ファイルを使用したCA証明書の作成

  1. 設定ファイル(例:ca_config.cnf)を作成します。

    [ req ]
    distinguished_name = req_distinguished_name
    x509_extensions = v3_ca
    prompt = no
    
    [ req_distinguished_name ]
    C = JP
    ST = Tokyo
    L = Minato-ku
    O = Example Corp
    OU = IT Department
    CN = Example CA
    emailAddress = admin@example.com
    
    [ v3_ca ]
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always,issuer
    basicConstraints = CA:true
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign
  2. 設定ファイルを使用してCA証明書を作成します。

    openssl req -x509 -key ca.key -out ca.crt -days 3650 -config ca_config.cnf

これにより、各証明書の作成時に必要なフィールドを設定ファイルに保存し、毎回同じ情報を入力する手間を省くことができます。設定ファイルを使用することで、証明書作成の手順が簡略化され、扱いやすくなります。

6. まとめ

この記事では、OpenSSLのインストールから基本的な操作、暗号化・復号化、ハッシュ計算、そして証明書の作成方法について学びました。これにより、OpenSSLを使ったセキュアな通信やデータ保護の基本を理解できたと思います。引き続き、公式ドキュメントやオンラインチュートリアルを活用して、OpenSSLの知識を深めていってください。

最後まで読んでいただきありがとうございました!この記事がみなさんの学習に役立てば幸いです。

参考資料

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事