2025/12/10

OpenSSL コマンド チートシート (PEM形式中心)

# OpenSSL コマンド チートシート (PEM形式中心)

## 証明書の表示
```bash
openssl x509 -in cert.pem -text -noout
```
- -in cert.pem : 入力する証明書ファイルを指定(PEM形式)
- -text : 証明書の詳細情報をテキスト形式で表示(Subject, Issuer, 有効期限, SANなど)
- -noout : 証明書本体(Base64エンコード部分)を出力しない

## CSR (証明書署名要求) の内容確認
```
openssl req -in request.csr -text -noout
```

## 秘密鍵の内容確認
```
openssl rsa -in private.key -check -noout
```
- -check : 秘密鍵の整合性を検証

## サーバー証明書の確認
```
openssl s_client -connect example.com:443 -servername example.com
```
- -connect host:port : 接続先ホストとポートを指定(HTTPSなら443)
- -servername host : SNI (Server Name Indication) を指定。複数ドメインを持つサーバーで正しい証明書を取得するために必要

証明書部分だけ抽出して詳細表示:
```
openssl s_client -connect example.com:443 -servername example.com /dev/null | openssl x509 -text -noout
```

## 秘密鍵とCSR作成
```
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
```
- -new : 新しいCSRを作成
- -newkey rsa:2048 : 新しいRSA秘密鍵を生成(2048bit)
- -nodes : 秘密鍵を暗号化せずに保存(パスフレーズなし)
- -keyout server.key : 秘密鍵の出力先ファイル
- -out server.csr : CSRの出力先ファイル

## 証明書の検証
```
openssl verify -CAfile ca.pem cert.pem
```
- -CAfile ca.pem : 信頼するCA証明書を指定

## 形式変換 (PEM中心)
#### PEM → DER
```
openssl x509 -in cert.pem -outform der -out cert.der
```
- -outform der : 出力形式をDER (バイナリ) に指定

#### DER → PEM
```
openssl x509 -in cert.der -inform der -out cert.pem
```
- -inform der : 入力形式がDERであることを指定

## PFX / PKCS#12 関連
- **PKCS#12**:秘密鍵・証明書・証明書チェーンを1つの暗号化コンテナにまとめる標準規格
- **PFX / P12**:PKCS#12形式のファイルの呼び名(Windows/IISでは `.pfx`、Linux/OpenSSLでは `.p12` が一般的)

**※ PFX(PKCS#12)を扱うすべてのコマンドでは、PFX 作成時に設定されたパスワードが必要**
#### PFX (PKCS#12) → PEM(まとめて出力)
```
openssl pkcs12 -in cert.pfx -out cert.pem -nodes
```
- -in cert.pfx : 入力ファイル(PKCS#12形式)
- -nodes : 秘密鍵を暗号化せずに出力

#### PFX → 秘密鍵のみ
```
openssl pkcs12 -in cert.pfx -nocerts -out server.key
```

#### PFX → サーバー証明書のみ
```
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out server.crt
```

#### PFX → 中間CA証明書(チェーン)
```
openssl pkcs12 -in cert.pfx -cacerts -nokeys -out chain.crt
```

#### 秘密鍵のパスワードを除去(Apache / Nginx用)
```
openssl rsa -in server.key -out server_nopass.key
chmod 600 server_nopass.key
```

#### 個々のファイル → PFX を作成
```
openssl pkcs12 -export \
  -inkey server.key \
  -in server.crt \
  -certfile chain.crt \
  -out cert.pfx
```
- 秘密鍵 + 証明書 + 中間CA を 1つの PFX にまとめる
- 実行時に PFX 用パスワードを設定

#### PFX の内容確認(復号せず表示)
```
openssl pkcs12 -in cert.pfx -info -noout
```
- 使用暗号方式(TripleDES / AES256)
- 証明書構成
- MAC iteration 回数

#### 鍵と証明書の一致確認
```
openssl x509 -noout -modulus -in server.crt | openssl md5
openssl rsa  -noout -modulus -in server_nopass.key | openssl md5
```
- 両方のハッシュが一致すれば OK

## 自己署名証明書
### ダミー証明書の作成(自己署名証明書を一度に生成)
```
openssl req -x509 -newkey rsa:2048 -nodes -keyout dummy.key -out dummy.crt -days 365 -subj "/CN=example.com"
```
- 秘密鍵と自己署名証明書を同時に生成
- -x509 : CSRではなく自己署名証明書を直接出力
- -days 365 : 有効期限を365日に設定
- -subj : 対話入力を省略してDNを指定(例: CN=example.com)

### 通常の3ステップの流れ
```
# (1) 秘密鍵を生成
openssl genrsa -out server.key 2048

# (2) CSRを生成
openssl req -new -key server.key -out server.csr -subj "/CN=example.com"

# (3) CSRを秘密鍵で署名して自己署名証明書を作成
openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 365
```

0 件のコメント:

コメントを投稿

人気の投稿