OpenSSLのsslとコマンドで学ぶ基本操作と応用活用法

目次

はじめに

目的

本記事は、OpenSSL の「ssl」コマンドを中心に、実用的な使い方をわかりやすく整理した入門ガイドです。秘密鍵の作成、CSR(証明書署名要求)の生成、自己署名証明書の発行に加え、既存証明書の確認や接続テスト、形式変換、簡単な暗号化・復号まで代表的な手順と具体例を順を追って紹介します。

対象読者と前提

  • サーバ証明書の基本的な流れを知りたい方
  • コマンドラインで作業できる方(Windows の場合は PowerShell や WSL、Mac/Linux のターミナル)
    専門的な暗号理論は扱いません。実務で使えるコマンドと注意点を重視して解説します。

記事の使い方

各章は独立して読みやすく構成しています。実際に手を動かす場合は、操作ごとに記載のコマンド例をコピーして試してください。ファイル名やパスワードは適宜置き換えて使います。

注意点(短く)

秘密鍵は厳重に保管してください。誤って公開すると証明書の信頼性が損なわれます。また、実運用では認証局(CA)による署名が必要な場面が多い点にご留意ください。

次章から具体的なコマンドと用途を丁寧に紹介していきます。

OpenSSLと「ssl コマンド」で何ができるのか

概要

OpenSSLはSSL/TLSや公開鍵暗号、証明書の操作を行う定番のコマンドラインツールです。サーバ証明書や鍵の作成・確認だけでなく、通信確認やファイル形式の変換、暗号化・復号・署名にも使えます。

主な用途と具体例

  • 秘密鍵の作成:サーバ用やクライアント用の秘密鍵を生成します。例: openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048
  • CSR(証明書署名要求)の作成:認証局に渡すための申請ファイルを作ります。例: openssl req -new -key key.pem -out req.csr
  • 自己署名証明書の発行:テスト用に自分で署名した証明書を作成します。例: openssl x509 -req -in req.csr -signkey key.pem -days 365 -out cert.pem
  • 証明書や鍵の内容確認:人が読める形で内容を表示します。例: openssl x509 -in cert.pem -text -noout
  • SSL/TLS接続のテスト:サーバとのハンドシェイクや証明書を確認します。例: openssl s_client -connect example.com:443
  • 形式変換(PEM/DER/PKCS#12):環境に合わせてファイル形式を変換します。例: openssl pkcs12 -export -inkey key.pem -in cert.pem -out cert.p12
  • データの暗号化・復号・署名:小さなファイルやメッセージの処理に便利です。例: openssl enc -aes-256-cbc -salt -in secret.txt -out secret.enc

注意点

  • コマンドは強力なので鍵やパスワードを安全に管理してください。ファイル権限を適切に設定することをお勧めします。
  • 実運用では自己署名証明書は信用されないため、認証局発行の証明書を使用してください。

OpenSSL の基本構文とよく使うサブコマンド一覧

基本構文

OpenSSL の基本はシンプルです。

openssl <サブコマンド> [オプション]

例えば証明書署名要求(CSR)を作るなら openssl req -new -key key.pem -out csr.pem のように実行します。

よく使うサブコマンド(簡単な説明と例)

  • req:CSR の作成や自己署名証明書の作成に使います。例:openssl req -new -key key.pem -out csr.pem
  • genpkey/genrsa:秘密鍵を生成します。例(RSA): openssl genrsa -out key.pem 2048openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048
  • x509:証明書の表示や変換、編集を行います。例:openssl x509 -in cert.pem -text -noout
  • s_client:SSL/TLS 接続のテストに使います。例:openssl s_client -connect example.com:443
  • encaes-256-cbc など):ファイルの暗号化/復号に使います。例:openssl enc -aes-256-cbc -salt -in secret.txt -out secret.enc
  • rsa:RSA 鍵の形式変換やパスフレーズの付与/除去に使います。例:openssl rsa -in key.pem -out key_nopass.pem -nodes

補足のヒント

  • 入出力形式は -in/-out、PEM/DER は -inform/-outform で指定します。
  • 多くのコマンドに -text(中身表示)や -noout(余分な出力を抑える)があります。

これらを押さえると日常の証明書作業がかなり楽になります。

SSLサーバ用秘密鍵の作成コマンド

概要

SSL/TLSサーバで使う秘密鍵は、安全な通信の根幹です。ここでは代表的な生成コマンドと、より推奨される新しい方法、既存鍵にパスフレーズを付ける方法を例と共に説明します。

伝統的なRSA秘密鍵生成

古くから使われる方法は次のコマンドです。簡潔で互換性が高いです。

openssl genrsa -out private.key 2048

この例では2048ビットのRSA鍵を作ります。ファイルは適切なパーミッション(例: chmod 600)で保管してください。

推奨される新コマンド(genpkey)

より新しいやり方は genpkey です。オプションでビット長やアルゴリズムを明示できます。

RSAの例:
openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048

ED25519の例(高速で短い鍵):
openssl genpkey -algorithm ED25519 -out private_ed25519.key

genpkeyは将来的なアルゴリズム拡張にも対応しやすい点が利点です。

既存の秘密鍵にパスフレーズをかける

平文の鍵に対してパスフレーズを付けるには次のコマンドを使います。

openssl rsa -aes256 -in unencrypted.key -out private.key

実行するとパスフレーズを入力するよう求められます。復号には同じパスフレーズが必要です。

運用上の注意

  • 鍵ファイルのパーミッションを厳しくする(例: chmod 600)。
  • バックアップは安全な場所に保存する。パスフレーズを忘れると復元できない点に注意してください。

CSR(証明書署名要求)を作成するコマンド

秘密鍵とCSRを同時に作成

秘密鍵とCSRを同時に作るには次のコマンドを使います。

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
  • -new: 新しいCSRを作成します。 -newkey rsa:2048: 2048ビットのRSA鍵を同時に作成します。 -nodes: 鍵をパスフレーズで暗号化しません(自動運用向け)。

既存秘密鍵からCSRを作成

既に鍵がある場合は次のように作成します。

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

対話入力の注意点(Common Name)

対話で国名・都道府県・組織名・組織単位・コモンネーム(CN)などを聞かれます。CNには証明書を使う正確なFQDN(例: www.example.com)を指定してください。間違うと証明書が期待通り機能しません。

コマンド非対話式の例

対話を避ける場合は-subjで一度に指定できます。

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr \
  -subj "/C=JP/ST=Tokyo/L=Chiyoda/O=Example Corp/CN=www.example.jp"

確認と権限

CSRの内容確認は openssl req -text -noout -verify -in server.csr で行います。秘密鍵は権限を600にして安全に保管してください。

自己署名証明書を発行するコマンド

以下では、自己署名証明書を手早く作成する方法と注意点をわかりやすく説明します。

コマンド例

openssl req -new -x509 -nodes -days 365 -subj '/CN=example.com' -keyout server.key -out server.crt

この1行で秘密鍵(server.key)と自己署名のX.509証明書(server.crt)を同時に作成します。

主なオプションの説明

  • -x509: CSRではなく直接X.509証明書を出力します。
  • -nodes: 鍵にパスフレーズを付けずに保存します(自動起動するサービス向け)。
  • -days 365: 証明書の有効期間(日数)を指定します。
  • -subj ‘/CN=example.com’: 対話入力を省略して証明書の識別名を設定します。
  • -keyout / -out: それぞれ秘密鍵と証明書の出力先を指定します。

対話式で作る場合

-subjを省くと、国名や組織名などを順に入力する対話式になります。細かく設定したい場合はこちらを使ってください。

注意点と確認方法

  • ブラウザやOSは自己署名を信頼しません。テストや社内専用に使ってください。
  • 秘密鍵の権限は厳しく(例: chmod 600)してください。
  • 作成後は以下で中身を確認できます:
  • cert内容: openssl x509 -in server.crt -noout -text
  • 鍵と証明書の一致: 証明書と鍵のモジュラスを比較して確認します。

必要に応じて、自己署名証明書を社内の信頼ストアに登録すると、各端末で信頼されるようになります。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次