Proxyman のカスタム証明書(Custom Certificates)
Proxyman にカスタムのルート証明書、サーバー証明書、クライアント証明書を追加して、SSL ピンニングや相互 TLS に対応します。Apple が信頼する自己署名ルート証明書の作成方法も解説します。
1. 概要
Proxyman は、カスタムの Root Certificate、Server Certificate、Client Certificate に対応しています。独自の証明書を追加すると、Proxyman はそれらを使用して、クライアント、サーバー、Proxyman アプリの間の SSL 接続を確立します。
| カスタム証明書の種類 | 用途 | Proxyman での使用方法 |
|---|---|---|
| Server Certificate | SSL ピンニングを使用するクライアントからの HTTPS 通信をインターセプトする場合 | クライアントとの SSL ハンドシェイクでこの証明書を使用します |
| Client Certificate | 相互認証(Mutual Authentication)を使用するクライアントからの HTTPS 通信をインターセプトする場合 | 特定のサーバーとの SSL ハンドシェイクでこの証明書を使用します |
| Root Certificate | ローカルの Proxyman 証明書を使用せずに、クライアントとサーバーの HTTPS 通信をインターセプトする場合 | クライアントとサーバーの両方との SSL ハンドシェイク |

Root Certificate タブ
Proxyman のルート証明書は、お使いの Mac 上でローカルに生成されます。独自のルート証明書を作成して Proxyman に追加することもできます。自己署名ルート証明書の作成方法を参照してください。
2. 証明書の形式
Proxyman は以下の形式を受け付けます。
| カスタム証明書 | PEM または DER | PKCS #12 (p12) |
|---|---|---|
| Root Certificate | 非対応 | 対応 |
| Client Certificate | 対応 | 対応 |
| Server Certificate | 対応 | 対応 |
- PKCS #12(p12)
- PEM または DER 形式の秘密鍵と証明書ファイル
- Proxyman は、秘密鍵と証明書ファイルの形式(PEM または DER)を自動で判別します。
- 暗号化された秘密鍵または PKCS #12 ファイルをインポートするときは、Proxyman がパスワードを求めます。
- すべてのパスフレーズは Proxyman Keychain に安全に保存されます。
Proxyman がサポートしていない形式の証明書を使用している場合は、インポートする前に p12 または PEM/DER 形式に変換してください。
3. macOS 10.15 以降と iOS 13 以降の証明書要件
macOS 10.15 以降または iOS 13 以降でカスタムのルート証明書またはサーバー証明書を使用する場合、以下の要件を満たしていないと、Safari や iOS デバイスで SSL ハンドシェイクが失敗する可能性があります。
- RSA 鍵は、鍵長 2048 ビット以上を使用する必要があります
- ハッシュアルゴリズムは SHA-2 ファミリーである必要があります
- サーバーの DNS 名は Subject Alternative Name (SAN) に含まれている必要があります。Common Name (CN) は、もう信頼されません
- 証明書が有効である必要があります(現在の日付が Not Before と Not After の間にあること)
- TLS サーバー証明書には、id-kp-serverAuth OID を含む ExtendedKeyUsage(EKU)拡張が必要です
詳細はこちら:iOS 13 および macOS 10.15 における信頼された証明書の要件
複雑すぎる場合は、Proxyman に任せることもできます。Certificate メニュー → Install Certificate on this Mac… を開き、Automatic タブを選択します。
4. よくある問題
| 問題 | 解決策 |
|---|---|
| 秘密鍵と証明書が一致しない | 別の証明書と秘密鍵を試して、それらが一致していることを確認してください |
| カスタム証明書の SSL ハンドシェイクエラーが発生する |
|
| パスフレーズが無効なため、証明書をインポートできない | 暗号化された秘密鍵または P12 ファイルを開くための正しいパスフレーズを、チームリーダーに確認してください |
5. 使い方
- Certificate メニュー → Add Custom Certificates… を開きます
6. Apple の新しいセキュリティ要件に準拠した、カスタムルート証明書用の自己署名証明書の作成方法
iOS 13 と macOS Catalina (10.15) 以降の Apple の要件により、動作する自己署名証明書を生成するには、追加の設定が必要です。
次の手順に従ってください。
- デスクトップ フォルダに
cert.configファイルを作成します
[ ca ]
default_ca = CA_default
[ CA_default ]
default_md = sha256
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage=critical,keyCertSign
extendedKeyUsage = serverAuth,clientAuth
[ req ]
prompt = no
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
C=US
L=US
O=Proxyman LLC
CN=proxyman.dev
OU=Proxyman
- C、L、O、CN、OU の各パラメータの値を更新します
2. ターミナルで RSA 鍵を生成します。(your_password は任意のパスワード(例:123456)に置き換えてください)
cd ~/Desktop
openssl genrsa -aes256 -passout pass:your_password -out key.pem 2048
3. 自己署名証明書と秘密鍵を生成します。(your_password は手順 2 のパスワードに置き換えてください)
openssl req -x509 -new -nodes -passin pass:your_password -config cert.config -key key.pem -sha256 -extensions v3_ca -days 825 -out root-ca.pem
4. p12 形式に変換します。(your_password は手順 2 のパスワードに置き換えてください)
openssl pkcs12 -export -legacy -out root-ca.p12 -in root-ca.pem -inkey key.pem -passin pass:your_password -passout pass:your_password
5. root-ca.p12 ファイルが作成されました。次の手順に進んでください。
macOS 14(OpenSSL v3)以降でカスタム証明書をインポートできない場合は、手順 4 で `-legacy` フラグを使用してください。
参考:MAC verification failed during PKCS12 import (Stack Overflow)
7. カスタムルート証明書としてインポートする
- Certificate メニュー → Add Custom Certificates… を開き、Root Certificate タブを選択します
- Import ボタン → Import P12... をクリックします
- root-ca.p12 ファイルを選択し、パスワードを入力します。
- キーチェーンアクセスで、追加したカスタム証明書を信頼するように設定します。
- キーチェーンアクセスを開きます
- 追加した証明書を検索します。名前は証明書の Common Name (CN) になっている場合があります
- 証明書をダブルクリックして開き、Always Trust を選択します
- ウィンドウを閉じて変更を保存します
5. 緑色のチェックマークが表示されていることを確認してください。表示されていれば、証明書がインストールされ、信頼されています。
8. サーバー証明書/クライアント証明書としてインポートする
カスタムのサーバー証明書またはクライアント証明書の場合は、自己署名証明書を作成しないでください。会社で使用している証明書について、チームメンバーまたはチームリーダーに確認してください。証明書の形式は DER/PEM または P12 です。
次に、カスタム証明書ウィンドウの Server Certificates タブまたは Client Certificates タブでインポートします。
ルート証明書ではないため、システムのキーチェーンでこの証明書を信頼する必要はありません。