OpenSSLは、インターネット通信を暗号化し、セキュリティを強化するための重要なツールです。
はじめに
「証明書って何?」「OpenSSLを使えばいいと聞いたけど、、」とお悩みの皆さんへ。この記事では、初めてOpenSSLを使う方のために、基本的な使い方から証明書の作成方法までをわかりやすく説明します。暗号化通信の設定や証明書の取り扱いについて、スムーズに理解できるようサポートします。
OpenSSLとは?
OpenSSLは、オープンソースの暗号化ツールキットです。主にSSL/TLS通信の暗号化や、データの暗号化・復号化を行います。インターネット上で安全に情報を送受信するために広く使われています。
OpenSSLのメリット
OpenSSLを使うと、Webサイトのセキュリティ強化、電子メールの暗号化、ファイルの暗号化などが簡単にできます。また、証明書を自分で作成できるので、コストを抑えつつ高いセキュリティを実現できます。
- 無料で利用可能
- 広範なサポート
- 高い信頼性
初心者向け学習のポイント
OpenSSLを学ぶ際、まずはインストールと基本的なコマンドを理解することが大切です。その後、証明書作成や暗号化技術に慣れ、実践的なスキルを身につけましょう。
環境構築
OpenSSLを始めるためには、まず環境を整える必要があります。このセクションでは、必要なものの準備からインストール手順までを説明します。
必要なもの
OpenSSLを使うには、次のものが必要です:
- インターネット接続 (インストールパッケージのダウンロードに必要です。)
- OpenSSLのインストール
- コマンドラインツール(WindowsならPowerShell、macOSやLinuxならターミナル)
インストール手順
Windows
- OpenSSLの公式サイトからWindows用インストーラーをダウンロードします。
- インストーラーを実行し、インストールします。
- 環境変数PATHにOpenSSLを追加します。
macOS
macOSでは、Homebrewを使うと簡単にインストールできます。次のコマンドを実行します:
brew install openssl
- Homebrewがインストールされていない場合は、公式サイトの手順に従ってインストールしてください。
Linux
Linuxでは、パッケージマネージャを使ってインストールします。例えば、Ubuntuでは次のコマンドです:
sudo apt install openssl
- ターミナルを開き、パッケージマネージャを使用してインストールします。
sudo apt-get install openssl
動作確認
インストールが完了したら、次のコマンドで正常にインストールされたか確認します:
openssl version
これでバージョンが表示されれば、インストールは成功です。
基本操作
OpenSSLを使って、基本的な操作を行います。
ヘルプコマンド
OpenSSLには多くのコマンドやオプションがあります。以下のコマンドでヘルプを表示できます:
openssl help
バージョン確認
インストールされたOpenSSLのバージョンを確認するには、次のコマンドを実行します:
openssl version
暗号化・復号化
OpenSSLを使って、データの暗号化と復号化ができます。
暗号化
ファイルを暗号化するには、次のコマンドを使います:
openssl enc -aes-256-cbc -in plaintext.txt -out encrypted.txt
復号化
暗号化したファイルを復号化するには、次のコマンドを使います:
openssl enc -d -aes-256-cbc -in encrypted.txt -out decrypted.txt
ハッシュ計算
ファイルや文字列のハッシュ値を計算するには、次のコマンドを使います:
openssl dgst -sha256 file.txt
証明書作成
ここからは、OpenSSLを使用して証明書を作成する方法について学びます。証明書は、安全な通信を確立するために必要なもので、サーバーやクライアントの身元を証明します。以下の手順に従って、秘密鍵の生成から自己署名証明書の発行、CA証明書の作成までを実践してみましょう。
秘密鍵とは?
秘密鍵は暗号化において重要な役割を果たします。公開鍵暗号方式では、公開鍵と秘密鍵のペアを使用して、安全な通信を行います。
CSR(証明書署名要求)とは?
CSRは、証明書を発行してもらうために必要なリクエストです。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 |
これらの情報を入力して、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 password
やAn optional company name
は追加の属性として入力が求められますが、これらは証明書のセキュリティや機能に直接関与しないため、通常は入力する必要はありません。特に必要がなければEnterキーを押して進めてください。
他に入力を求められることがある項目として、Subject Alternative Name (SAN)
があります。これにより、1つの証明書で複数のドメイン名をサポートすることができます。これを指定するには、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 -new -newkey rsa:2048 -days 365 -nodes -keyout mykey.key -out mycert.csr
openssl x509 -req -in mycert.csr -signkey mykey.key -out mycert.crt
CA証明書の発行
CA証明書は、信頼できる認証機関が発行する証明書で、インターネット上の通信を安全に保つために使用されます。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) | 証明書の有効期間を日数で入力します。 | 365 |
openssl req -new -x509 -key ca.key -out ca.crt -days 365
詳細設定による証明書作成(オプション)
設定ファイルを使用して、より高度な証明書の作成ができます。
設定ファイルを使用したCSR作成
設定ファイルを使うことで、複雑な証明書要求を簡単に作成できます。
- 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.設定ファイルを使用して自己署名証明書を作成します。
openssl req -x509 -key private.key -out selfsigned.crt -days 365 -config selfsigned_config.cnf
設定ファイルを使用したCA証明書作成
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
これにより、各証明書の作成時に必要なフィールドを設定ファイルに保存し、毎回同じ情報を入力する手間を省くことができます。設定ファイルを使用することで、証明書作成の手順が簡略化され、扱いやすくなります。
操作手順:SSL証明書をApidogに追加する
APIのセキュリティをさらに確保するために、一部のAPIでは、クライアント証明書が有効にされています。そうすると、当該APIにリクエストを送信する時に、SSLクライアント証明書を添付して送信する必要があります。
この部分では、SSLクライアント証明書をAPIクライアントに追加して、リクエストを送信してレスポンスを取得する操作手順を皆さんに紹介します。ここでSSL証明書を簡単に追加できるAPIクライアントのApidogを使用して作業を進めることがおすすめです。ApidogはAPIのライフサイクル管理ツールとして、APIのリクエストとレスポンス取得、APIテスト自動化、モックサーバーなどの機能を利用することができますし、クライアント側のSSL証明書を追加して、簡単にSSL化されたサーバーからレスポンスを取得できます。
それでは、次のステップを参照して、SSL証明書をAPIクライアントに追加して、API通信の暗号化を実現することができます。
ステップ⒈Apidogを立ち上げ、SSLクライアント証明書が必要となるAPIを開きます。
ステップ⒉「設計」モードに切り替え、上部のメニューバーで「変更」タブを選択して、Requestパラメータで「設定」をクリックします。
ステップ⒊「証明書の管理」をクリックします。
①CA証明書をオンにして、PEMファイルをアップロードします。
②「クライアント証明書を追加」をクリックして、必要な設定を終えます。
まとめ
OpenSSLは、インターネット通信のセキュリティを保つために欠かせないツールです。証明書の作成から、暗号化・復号化、ハッシュ計算まで、さまざまな用途に対応できます。これらの基本的な操作を覚えて、セキュリティに関する知識を深めていきましょう。