# Proxyman のカスタム証明書（Custom Certificates）

> Proxyman にカスタムのルート証明書、サーバー証明書、クライアント証明書を追加して、SSL ピンニングや相互 TLS に対応します。Apple が信頼する自己署名ルート証明書の作成方法も解説します。

## 1. 概要 {#1-whats-it}

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 ハンドシェイク       |

![Proxyman のカスタム証明書ウィンドウのルート証明書タブ。Proxyman の CA 証明書が Installed &#x26; Trusted になっている](https://proxyman.com/docs/assets/proxyman-custom-root-certificate.jpg)

_Root Certificate タブ_

> **備考:** Proxyman のルート証明書は、お使いの Mac 上でローカルに生成されます。独自のルート証明書を作成して Proxyman に追加することもできます。[自己署名ルート証明書の作成方法](https://proxyman.com/docs/ja/advanced-features/custom-certificates#6-how-to-generate-self-signed-certificates-for-custom-root-certificate-that-comply-with-new-apples-security-requirements)を参照してください。

## 2. 証明書の形式 {#2-certificate-formats}

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 以降の証明書要件 {#3-certificate-requirement-on-macos-1015-and-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 における信頼された証明書の要件](https://support.apple.com/en-us/HT210176)

> **備考:** 複雑すぎる場合は、Proxyman に任せることもできます。**Certificate** メニュー → **Install Certificate on this Mac…** を開き、**Automatic** タブを選択します。

## 4. よくある問題 {#4-common-issues}

| 問題                                                   | 解決策                                                                                                                                                                                                                                                                                                   |
| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 秘密鍵と証明書が一致しない                             | 別の証明書と秘密鍵を試して、それらが一致していることを確認してください                                                                                                                                                                                                                                   |
| カスタム証明書の SSL ハンドシェイクエラーが発生する    | <ul><li>カスタム証明書をシステムキーチェーンに追加して、信頼するように設定してみてください</li><li>証明書が macOS の要件を満たしていない場合は、[セクション 3](https://proxyman.com/docs/ja/advanced-features/custom-certificates#3-certificate-requirement-on-macos-1015-and-ios-13) を参照してください</li><li>証明書の有効期限を確認してください</li></ul> |
| パスフレーズが無効なため、証明書をインポートできない   | 暗号化された秘密鍵または P12 ファイルを開くための正しいパスフレーズを、チームリーダーに確認してください                                                                                                                                                                                                 |

## 5. 使い方 {#5-how-to-use}

* **Certificate** メニュー → **Add Custom Certificates…** を開きます

## 6. Apple の新しいセキュリティ要件に準拠した、カスタムルート証明書用の自己署名証明書の作成方法 {#6-how-to-generate-self-signed-certificates-for-custom-root-certificate-that-comply-with-new-apples-security-requirements}

[iOS 13 と macOS Catalina (10.15) 以降の Apple の要件](https://proxyman.com/docs/ja/advanced-features/custom-certificates#3-certificate-requirement-on-macos-1015-and-ios-13)により、動作する自己署名証明書を生成するには、追加の設定が必要です。

次の手順に従ってください。

1. **デスクトップ** フォルダに `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）に置き換えてください）

```bash
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)](https://stackoverflow.com/questions/70431528/mac-verification-failed-during-pkcs12-import-wrong-password-azure-devops)

## 7. カスタムルート証明書としてインポートする {#7-import-as-a-custom-root-certificate}

1. **Certificate** メニュー → **Add Custom Certificates…** を開き、**Root Certificate** タブを選択します
2. **Import** ボタン → **Import P12...** をクリックします
3. **root-ca.p12** ファイルを選択し、パスワードを入力します。
4. キーチェーンアクセスで、追加したカスタム証明書を信頼するように設定します。

* キーチェーンアクセスを開きます
* 追加した証明書を検索します。名前は証明書の Common Name (CN) になっている場合があります
* 証明書をダブルクリックして開き、**Always Trust** を選択します
* ウィンドウを閉じて変更を保存します

![Trust が Always Trust に設定された macOS のキーチェーンアクセスの証明書ウィンドウ](https://proxyman.com/docs/assets/Screen%20Shot%202020-09-09%20at%2006.30.51.png)

5\. 緑色のチェックマークが表示されていることを確認してください。表示されていれば、証明書がインストールされ、信頼されています。

## 8. サーバー証明書／クライアント証明書としてインポートする {#8-import-as-a-serverclient-certificate}

カスタムのサーバー証明書またはクライアント証明書の場合は、自己署名証明書を作成しないでください。会社で使用している証明書について、チームメンバーまたはチームリーダーに確認してください。証明書の形式は DER/PEM または P12 です。

次に、カスタム証明書ウィンドウの **Server Certificates** タブまたは **Client Certificates** タブでインポートします。

![秘密鍵ファイルと PEM 証明書ファイルが選択された Proxyman の証明書インポーターシート](https://proxyman.com/docs/assets/Screen%20Shot%202020-06-26%20at%2010.54.35.png)

> **備考:** ルート証明書ではないため、システムのキーチェーンでこの証明書を信頼する必要はありません。

## 詳細情報 {#learn-more}

* [Proxyman でカスタムルート証明書を生成して使用する方法](https://proxyman.com/posts/2020-09-09-Generate-Self-Signed-Certificate-iOS13-Mac-Catalina)
