# VPN / OpenVPN

OpenVPNはSSL/TLSをベースに各種機能を組み合わせたオールインワン型のSSL VPNです。
本製品では、WindowsやMacOS X等をクライアントとするリモートアクセス型VPNの構築に使います。
OpenVPNにはTap(L2)、Tun(L3)の2つのモードがあり、それぞれ L2（ブリッジ型またはルーティング型）、L3（ルーティング型）のリモートアクセスに対応できます。
本章ではOpenVPNトンネルインターフェースに特化した説明を行います。
トンネルインターフェース全般については「VPN」/「トンネルインターフェース」を、インターフェース全般については「インターフェース」/「一般設定」をご覧ください。
また、サポートするOpenVPNクライアント（OS、アプリケーション）についてはリリースノートをご覧ください。

## 基本設定

OpenVPNでは接続クライアントのユーザー名・パスワード認証にRADIUSサーバーかLDAPサーバーを使用します。
Note

本製品はLDAPクライアント機能をサポートしていないため、外部LDAPサーバーは利用できません。

また、クライアントにIPアドレスなどのネットワーク設定情報を提供する場合にもRADIUSサーバーかLDAPサーバーを使用することができます。
以下の各例では、本製品のローカルRADIUSサーバーを使うものと仮定しています。
外部のRADIUSサーバーやLDAPサーバーを使用する場合の変更点は、「外部のRADIUS/LDAPサーバーを使用する場合」をご参照ください。
また、ローカルRADIUSサーバーについては「運用・管理」/「RADIUSサーバー」をご覧ください。
また、OpenVPNサーバーとなる本製品はIPv4でインターネットに接続しているものとします。WAN側インターフェースのIPアドレスは固定であり、クライアント・本製品間でIPv4の通信ができる状態になっているものとします。
Note

OpenVPNトンネルインターフェースは同時に2つまで使用可能です（TunモードとTapモードを1つずつ）。なお、2つ同時に使用する場合は、各トンネルインターフェースで異なるUDPポート番号を使用するよう設定してください（tunnel openvpn portコマンド）。

### OpenVPN Tun(L3)によるルーティング型リモートアクセスVPN

この構成は、OpenVPNクライアント（Windows、MacOS X）が本製品のOpenVPNトンネルインターフェースとポイントツーポイントで接続されているイメージです。クライアントとLAN側の通信はルーティングによって行われます。クライアントのIP設定情報はRADIUS属性によって提供します。

#### サーバー（本製品）側

1. ローカルRADIUSサーバーにOpenVPNユーザーを登録します。
   ここでは、userA、userB、userCという3人のユーザーを登録するものとします。
   - ローカルRADIUSサーバーの設定を開始します。これには、radius-server localコマンドを実行します。
     初回実行時のみ、ローカルCA（ローカルなルート認証局）の初期設定（自署ルートCA証明書の発行など）やサーバー証明書の発行などが自動的に行われ、またローカルホスト（127.0.0.1）をRADIUSクライアント（NAS）として自動登録します。

         awplus(config)# radius-server local
         Created trustpoint "local".
         Generating 2048-bit key for local CA...
         Automatically authenticated trustpoint "local".
         Automatically enrolled the local server to trustpoint "local".

   - ネットワーク設定情報を提供するため、ユーザーごとにユーザーグループを作成し、IPアドレスやスタティック経路、DNSサーバーアドレスなどの指定を行います。ユーザーグループの作成はgroupで、各種情報の指定はattributeでおこないます。
     ユーザーuserA

         awplus(config-radsrv)# group userA
         awplus(config-radsrv-group)# attribute Service-Type Authenticate-Only
         awplus(config-radsrv-group)# attribute Framed-IP-Address 192.168.254.231
         awplus(config-radsrv-group)# attribute Framed-IP-Netmask 255.255.255.0
         awplus(config-radsrv-group)# attribute Framed-Route "192.168.10.0/24 192.168.254.1"
         awplus(config-radsrv-group)# attribute MS-Primary-DNS-Server 192.168.10.5
         awplus(config-radsrv-group)# exit

     ユーザーuserB

         awplus(config-radsrv)# group userB
         awplus(config-radsrv-group)# attribute Service-Type Authenticate-Only
         awplus(config-radsrv-group)# attribute Framed-IP-Address 192.168.254.232
         awplus(config-radsrv-group)# attribute Framed-IP-Netmask 255.255.255.0
         awplus(config-radsrv-group)# attribute Framed-Route "192.168.10.0/24 192.168.254.1"
         awplus(config-radsrv-group)# attribute MS-Primary-DNS-Server 192.168.10.5
         awplus(config-radsrv-group)# exit

     ユーザーuserC

         awplus(config-radsrv)# group userC
         awplus(config-radsrv-group)# attribute Service-Type Authenticate-Only
         awplus(config-radsrv-group)# attribute Framed-IP-Address 192.168.254.233
         awplus(config-radsrv-group)# attribute Framed-IP-Netmask 255.255.255.0
         awplus(config-radsrv-group)# attribute Framed-Route "192.168.10.0/24 192.168.254.1"
         awplus(config-radsrv-group)# attribute MS-Primary-DNS-Server 192.168.10.5
         awplus(config-radsrv-group)# exit

   - ユーザーを登録します。これには、userの各コマンドを使います。
     ユーザー名、パスワードに加え、groupパラメーターでネットワーク設定情報を含むユーザーグループを指定しています。

         awplus(config-radsrv)# user userA password passwordA group userA
         awplus(config-radsrv)# user userB password passwordB group userB
         awplus(config-radsrv)# user userC password passwordC group userC

   - ローカルRADIUSサーバーを有効化します。これには、server enableコマンドを使います。

         awplus(config-radsrv)# server enable
         awplus(config-radsrv)# exit

2. OpenVPNで使用するRADIUSサーバーを登録します。これには、radius-server hostコマンドとaaa authentication openvpnコマンドを使います。

       awplus(config)# radius-server host 127.0.0.1 key awplus-local-radius-server
       awplus(config)# aaa authentication openvpn default group radius

3. トンネルインターフェースtunnel0を作成します。これにはinterfaceコマンドを使います。

       awplus(config)# interface tunnel0

4. トンネリング方式としてopenvpn tunを指定します。これには、tunnel mode openvpn tunコマンドを使います。

       awplus(config-if)# tunnel mode openvpn tun

5. トンネルインターフェースtunnel0にIPアドレスを設定して、同インターフェースでIPv4パケットのルーティングが行われるようにします。これには、ip addressコマンドを使います。

       awplus(config-if)# ip address 192.168.254.1/24

インターフェースへのIPアドレス設定については「IP」/「IPインターフェース」を、IPの経路設定については「IP」/「経路制御」、および、ダイナミックルーティングに関する各セクションをご覧ください。

#### クライアント側（参考）

本構成における、Windows版クライアントの設定ファイル例を示します。
[tun_client.ovpn]

    # OpenVPNサーバー（ルーター）と接続先ポートの指定
    remote 10.1.1.1 1194 udp

    # 経路情報等をサーバーから取得する
    pull

    # TLSクライアントを有効にする
    tls-client

    # openvpnバージョンの指定
    compat-mode 2.4.0

    # 使用する暗号形式
    data-ciphers AES-256-GCM:AES-128-GCM:Chacha20-Poly1305
    cipher AES-128-CBC

    # デジタル署名形式
    auth SHA1

    # TLSのバージョン
    tls-version-min 1.2

    # TLSの形式
    tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA

    explicit-exit-notify

    # ユーザー名・パスワード認証を有効にする
    auth-user-pass

    # ルーターから取得したローカルCAの自署ルート証明書
    ca cacert.pem

    # keepaliveの送信間隔とタイムアウトの時間
    keepalive 10 120

    # アイドル時間
    inactive 300 100000

    # 使用するモード（Tunモード）
    dev tun

    # インターフェースのIPをサーバーから取得する
    float

    # IPv6のトンネリングを有効にする（Tunモードのみ）
    tun-ipv6

    # トンネルを有効にする
    topology subnet

    # 暗号化前のパケットのTOS値を暗号化後のパケットにコピーする
    passtos

    # 接続に使用するポート番号
    port 1194

    # ログのレベル（0～7）。0はログを生成せず、数が大きくなるほど詳細なログを表示する
    verb 3

    # パスワードの保存を無効にする
    setenv ALLOW_PASSWORD_SAVE 0

Note

上記の設定ファイル例は参考のために示した最小限の設定であり、動作を保証するものではありません。使用するクライアントやそのバージョン、OS、ネットワーク環境などによって必要な設定は異なりますので、あらかじめご了承ください。

Note

iOS版クライアントを使用する場合はクライアント設定ファイルの変更が必要です。詳しくは「iOS版クライアントを使用する場合」をご覧ください。

Note

caオプションで指定するCA証明書ファイルの配布方法については、「証明書の準備と配布」をご覧ください。

Note

tls-version-maxパラメーターを1.2に設定し、DHE TLS暗号を使用するように設定したクライアントとのOpenVPN接続は未サポートです。

### OpenVPN Tap(L2)によるルーティング型リモートアクセスVPN

この構成は、OpenVPNクライアント（Windows、MacOS X）が本製品のOpenVPNトンネルインターフェースとEthernetで接続されているイメージです。クライアントとLAN側の通信はルーティングによって行われます。

OpenVPN Tap(L2)トンネルインターフェースを使用する場合は、クライアントのIP設定情報をRADIUS属性だけでなく、DHCPで提供することも可能です。
以下の例では、本製品のDHCPサーバー機能を利用してOpenVPNクライアントにIPアドレスなどの情報を提供しています。
Note

Android版およびiOS版クライアントではTap(L2)モードでのOpenVPN接続が未サポートのため、本構成は使用できません。

#### サーバー（本製品）側

1. ローカルRADIUSサーバーにOpenVPNユーザーを登録します。
   ここでは、userA、userB、userCという3人のユーザーを登録するものとします。
   - ローカルRADIUSサーバーの設定を開始します。これには、radius-server localコマンドを実行します。
     初回実行時のみ、ローカルCA（ローカルなルート認証局）の初期設定（自署ルートCA証明書の発行など）やサーバー証明書の発行などが自動的に行われ、またローカルホスト（127.0.0.1）をRADIUSクライアント（NAS）として自動登録します。

         awplus(config)# radius-server local
         Created trustpoint "local".
         Generating 2048-bit key for local CA...
         Automatically authenticated trustpoint "local".
         Automatically enrolled the local server to trustpoint "local".

   - ユーザーを登録します。これには、userの各コマンドを使います。
     この例ではIP設定情報をDHCPで提供するためユーザーグループの設定は不要です。

         awplus(config-radsrv)# user userA password passwordA
         awplus(config-radsrv)# user userB password passwordB
         awplus(config-radsrv)# user userC password passwordC

   - ローカルRADIUSサーバーを有効化します。これには、server enableコマンドを使います。

         awplus(config-radsrv)# server enable
         awplus(config-radsrv)# exit

2. OpenVPNで使用するRADIUSサーバーを登録します。これには、radius-server hostコマンドとaaa authentication openvpnコマンドを使います。

       awplus(config)# radius-server host 127.0.0.1 key awplus-local-radius-server
       awplus(config)# aaa authentication openvpn default group radius

3. IP設定情報を提供するため、DHCPサーバーの設定を行います。
   DHCPサーバー機能の詳細については「IP付加機能」/「DHCPサーバー」をご覧ください。

       awplus(config)# ip dhcp option 121 name Classless-Static-Route hex
       awplus(config)# ip dhcp pool pool254
       awplus(dhcp-config)# network 192.168.254.0 255.255.255.0
       awplus(dhcp-config)# range 192.168.254.231 192.168.254.240
       awplus(dhcp-config)# dns-server 192.168.10.5
       awplus(dhcp-config)# option Classless-Static-Route 18c0a80ac0a8fe01
       awplus(dhcp-config)# lease 0 2 0

   Note

   本製品のDHCPサーバー機能を利用してOpenVPNクライアントにIPアドレスを提供する場合は、ip dhcp optionコマンドで定義した DHCPオプション121（Classless Static Route Option）を用いてスタティック経路を通知してください。
   optionコマンドで指定している `18c0a80ac0a8fe01` は、各経路の「宛先ネットワークマスク長、宛先ネットワークアドレス、ネクストホップアドレス」を16進数表記で連結したもので、次のように解釈します。

   16進表記 | 10進表記 | 説明
   経路エントリー #1 (宛先 192.168.10/24 ネクストホップ 192.168.254.1）
   `18` | `24` | 宛先マスク長
   `c0 a8 0a` | `192 168 10` | 宛先アドレス
   `c0 a8 fe 01` | `192 168 254 1` | ネクストホップアドレス

4. トンネルインターフェースtunnel0を作成します。これにはinterfaceコマンドを使います。

       awplus(config)# interface tunnel0

5. トンネリング方式としてopenvpn tapを指定します。これには、tunnel mode openvpn tapコマンドを使います。

       awplus(config-if)# tunnel mode openvpn tap

6. トンネルインターフェースtunnel0にIPアドレスを設定して、同インターフェースでIPv4パケットのルーティングが行われるようにします。これには、ip addressコマンドを使います。

       awplus(config-if)# ip address 192.168.254.1/24

インターフェースへのIPアドレス設定については「IP」/「IPインターフェース」を、IPの経路設定については「IP」/「経路制御」、および、ダイナミックルーティングに関する各セクションをご覧ください。

#### クライアント側（参考）

本構成における、Windows版クライアントの設定ファイル例を示します。
[tap_client.ovpn]

    # OpenVPNサーバー（ルーター）と接続先ポートの指定
    remote 10.1.1.1 1194 udp

    # 経路情報等をサーバーから取得する
    pull

    # TLSクライアントを有効にする
    tls-client

    # openvpnバージョンの指定
    compat-mode 2.4.0

    # 使用する暗号形式
    data-ciphers AES-256-GCM:AES-128-GCM:Chacha20-Poly1305
    cipher AES-128-CBC

    # デジタル署名形式
    auth SHA1

    # TLSのバージョン
    tls-version-min 1.2

    # TLSの形式
    tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA

    explicit-exit-notify

    # ユーザー名・パスワード認証を有効にする
    auth-user-pass

    # ルーターから取得したローカルCAの自署ルート証明書
    ca cacert.pem

    # keepaliveの送信間隔とタイムアウトの時間
    keepalive 10 120

    # アイドル時間
    inactive 300 100000

    # 使用するモード（Tapモード）
    dev tap

    # インターフェースのIPをサーバーから取得する
    float

    # トンネルを有効にする
    topology subnet

    # 暗号化前のパケットのTOS値を暗号化後のパケットにコピーする
    passtos

    # 接続に使用するポート番号
    port 1194

    # ログのレベル（0～7）。0はログを生成せず、数が大きくなるほど詳細なログを表示する
    verb 3

    # パスワードの保存を無効にする
    setenv ALLOW_PASSWORD_SAVE 0

Note

上記の設定ファイル例は参考のために示した最小限の設定であり、動作を保証するものではありません。使用するクライアントやそのバージョン、OS、ネットワーク環境などによって必要な設定は異なりますので、あらかじめご了承ください。

Note

Android版およびiOS版クライアントではTap(L2)モードでのOpenVPN接続は未サポートです。

Note

caオプションで指定するCA証明書ファイルの配布方法については、「証明書の準備と配布」をご覧ください。

Note

tls-version-maxパラメーターを1.2に設定し、DHE TLS暗号を使用するように設定したクライアントとのOpenVPN接続は未サポートです。

## 設定と状態の確認

OpenVPNトンネルインターフェースの情報はshow interfaceコマンドで確認できます。

    awplus> show interface tunnel0
    Interface tunnel0
      Link is UP, administrative state is UP
      Hardware is Tunnel
      index 11 metric 1 mtu 1500
      Bridge-group 1 (br1)
      <UP,BROADCAST,RUNNING,PROMISC,MULTICAST>
      SNMP link-status traps: Disabled
      Tunnel source UNKNOWN, destination UNKNOWN
      Tunnel name local awplus, remote  UNKNOWN
      Tunnel ID local (not set), remote (not set)
      Tunnel protocol/transport openvpn tap, key disabled, sequencing disabled
      Tunnel TTL -
      Tunnel RADIUS servers:
        host 127.0.0.1, port 1812
      Checksumming of packets disabled, path MTU discovery disabled
        input packets 1279, bytes 141524, dropped 0, multicast packets 0
        output packets 97, bytes 9760, multicast packets 0 broadcast packets 0
      Time since last state change: 0 days 00:26:27

接続中のOpenVPNクライアントの情報はshow openvpn connectionsコマンド、show openvpn connections detailコマンドで確認できます。

    awplus> show openvpn connections

    Maximum connections: 100

    Interface: tunnel0
                                          Rx      Tx
    Username    Real Address              Bytes   Bytes   Connected Since
    --------------------------------------------------------------------------------
    userA       ::ffff:10.1.252.4         46224   29943   Tue Mar 31 05:40:57 2015
    userB       ::ffff:10.213.82.232      6224    4150    Tue Mar 31 06:40:57 2015
    userC       ::ffff:10.10.10.184       15768   11087   Tue Mar 31 06:43:22 2015

    awplus> show openvpn connections detail

    Interface: tunnel0
     Username: userA
      Route:      192.168.20.0 255.255.255.0 192.168.10.32
      Address:    192.168.10.231 255.255.255.0
      DNS Server: 192.168.10.3
      DNS Server: 192.168.10.4

     Username: userB
      Route:      192.168.20.0 255.255.255.0 192.168.10.32
      Address:    192.168.10.232 255.255.255.0

     Username: userC
      Route:      192.168.20.0 255.255.255.0 192.168.10.32
      Address:    192.168.10.233 255.255.255.0

## 外部のRADIUS/LDAPサーバーを使用する場合

前記の基本設定例ではOpenVPNクライアントのユーザー名・パスワード認証にローカルRADIUSサーバーを使用していますが、外部のRADIUSサーバーまたはLDAPサーバーを使うこともできます。
Note

本製品はLDAPクライアント機能をサポートしていないため、外部LDAPサーバーは利用できません。

Note

ユーザー情報や提供する属性値の登録方法など、外部RADIUSサーバー、LDAPサーバーの設定方法については、ご使用になるRADIUSサーバー、LDAPサーバーのマニュアルをご参照ください。

その場合は、基本設定例に対し、次の変更を加えてください。

1. 使用するサーバーの種類（RADIUS/LDAP）に応じて、サーバー情報の登録を変更します。
   - 外部 RADIUSサーバーを使用する場合
     radius-server hostコマンドでは、ローカルRADIUSサーバーを表す「127.0.0.1」ではなく、外部RADIUSサーバーのアドレスと共有パスワードを指定してください。

         awplus(config)# radius-server host 192.168.10.5 key external-radius-server-password

     参照：「運用・管理」/「RADIUSクライアント」
2. ローカルRADIUSサーバーを使う場合、ローカルRADIUSサーバーのセットアップ過程でOpenVPNのサーバー認証に必要なCA証明書とサーバー証明書が自動的に生成されますが、外部RADIUS/LDAPサーバーを使う場合は自動生成されていない可能性が高いため、必要な証明書が作られているかどうかを確認します。これには、特権EXECモードのshow crypto pki certificatesコマンドを使います。
   Note

   現在ローカルRADIUSサーバーを使用していなくても、過去に一度でも設定を行ったことがある場合は証明書が生成されている可能性があります。

       awplus(config)# end
       awplus# show crypto pki certificates

   - 次のように「Self-signed root certificate」（CA証明書）と「Server certificate」（サーバー証明書）が表示される場合は、必要な証明書が存在していますので、これで設定変更は完了です。

         awplus# show crypto pki certificates

         --------------------
         Trustpoint "local" Certificate Chain
         --------------------
         Server certificate
            Subject     : /O=Allied-Telesis/CN=AlliedwarePlusSystem
            Issuer      : /O=Allied Telesis, Inc./CN=AlliedWarePlusCAXXXXXXXXXXXXXXXX
            Algorithms  : Public Key : rsaEncryption, 2048 bits
                        : Signature  : sha256WithRSAEncryption
            Valid From  : Jul 30 10:56:08 2015 GMT
            Valid To    : Jul 28 10:56:08 2020 GMT
            Fingerprint : 3A5B3E3B C0A4AE91 96386D8F 45A52EDA 60BA2084

         Self-signed root certificate
            Subject     : /O=Allied Telesis, Inc./CN=AlliedWarePlusCAXXXXXXXXXXXXXXXX
            Issuer      : /O=Allied Telesis, Inc./CN=AlliedWarePlusCAXXXXXXXXXXXXXXXX
            Algorithms  : Public Key : rsaEncryption, 2048 bits
                        : Signature  : sha256WithRSAEncryption
            Valid From  : Jul 30 10:56:08 2015 GMT
            Valid To    : Jul 27 10:56:08 2025 GMT
            Fingerprint : 8E668937 D96ABC7C A537CA93 E4FFFC60 1CB02C6C

   - 次のように証明書が表示されなかったり、「Self-signed root certificate」（CA証明書）と「Server certificate」（サーバー証明書）のどちらか一方しか表示されない場合は、手順3に進み、不足している証明書を生成してください。

         awplus# show crypto pki certificates
         There are no trustpoints defined.

         awplus# show crypto pki certificates

         --------------------
         Trustpoint "local" Certificate Chain
         --------------------
         Self-signed root certificate
            Subject     : /O=Allied Telesis, Inc./CN=AlliedWarePlusCAXXXXXXXXXXXXXXXX
            Issuer      : /O=Allied Telesis, Inc./CN=AlliedWarePlusCAXXXXXXXXXXXXXXXX
            Algorithms  : Public Key : rsaEncryption, 2048 bits
                        : Signature  : sha256WithRSAEncryption
            Valid From  : Jul 30 12:23:22 2015 GMT
            Valid To    : Jul 27 12:23:22 2025 GMT
            Fingerprint : 89FAF3C8 FAD1773A 3D34DFA1 2BF4C600 A076B443

3. 手順2の確認で証明書が不足していた場合は、下記の手順にしたがい足りない証明書を生成してください。
   - 手順2で証明書が表示されなかった場合は、crypto pki trustpointコマンドでローカルCAをセットアップしてCA証明書を生成し、続いてcrypto pki enrollコマンドでサーバー証明書を発行します。

         awplus# configure terminal
         Enter configuration commands, one per line.  End with CNTL/Z.

         awplus(config)# crypto pki trustpoint local
         Created trustpoint "local".
         Generating 2048-bit key for local CA...
         Automatically authenticated trustpoint "local".

         awplus(ca-trustpoint)# end
         awplus# crypto pki enroll local
         Using private key "server-default"...
         Successfully enrolled the local server.

   - 手順2で「Self-signed root certificate」の証明書は表示されたものの、「Server certificate」の証明書が表示されなかった場合は、crypto pki enrollコマンドでサーバー証明書だけを発行します。

         awplus# crypto pki enroll local
         Using private key "server-default"...
         Successfully enrolled the local server.

   - 手順2で「Server certificate」の証明書は表示されたものの、「Self-signed root certificate」の証明書が表示されなかった場合、表示された「Server certificate」の証明書は使えないため、何も表示されなかった場合と同様に、crypto pki trustpointコマンドでローカルCAをセットアップしてCA証明書を生成し（このとき既存のサーバー証明書は削除されます）、続いてcrypto pki enrollコマンドでサーバー証明書を発行します。

         awplus# configure terminal
         Enter configuration commands, one per line.  End with CNTL/Z.

         awplus(config)# crypto pki trustpoint local
         Created trustpoint "local".
         Generating 2048-bit key for local CA...
         Automatically authenticated trustpoint "local".

         awplus(ca-trustpoint)# end
         awplus# crypto pki enroll local
         Using private key "server-default"...
         Successfully enrolled the local server.

   証明書を生成したら、手順2に戻って必要な証明書が揃っているか再確認してください。問題がなければ、これで設定変更は完了です。

## クライアント証明書認証

OpenVPNの接続時には本製品（サーバー）からクライアントに対してサーバー証明書を送信しますが、オプションとして本製品がクライアントの証明書を検証することもできます（クライアント証明書認証）。
クライアント証明書認証は、RADIUS/LDAPサーバーを利用したユーザー名・パスワード認証、2要素認証と併用可能です。
認証順序は次のとおりです。

1. クライアント証明書認証 ※有効時のみ
2. ユーザー名・パスワード認証（RADIUS/LDAP）
3. ワンタイムパスワード（TOTP/HOTPまたは電子メール）※有効時のみ

Note

「ユーザー名・パスワード認証」は必須です。無効にはできません。

クライアント証明書認証を有効にするには、OpenVPNトンネルインターフェースに対してtunnel openvpn verify-client-certificate trustpointコマンドを実行し、必要な証明書が格納されているトラストポイント名を指定します。
クライアント証明書認証に必要なトラストポイントの設定については「証明書の準備と配布 > クライアント証明書認証が有効な場合」をご覧ください。
たとえば、ローカルCA（トラストポイント「local」）が発行した証明書を使ってクライアント証明書認証を行うには次のようにします。
外部CAが発行した証明書を使う場合は「local」の代わりに外部CA用に作成したトラストポイントの名前を指定してください。

    awplus(config)# interface tunnel0
    awplus(config-if)# tunnel openvpn verify-client-certificate trustpoint local

初期設定では、クライアントのユーザー名とクライアント証明書のCommon Name（CN）が一致していない場合、クライアント証明書の検証自体は成功しても認証結果は失敗となります。ユーザー名とCommon Name（CN）の不一致を許可したいときは、tunnel openvpn verify-client-certificate strict-common-name-checkコマンドをno形式で実行し、Common Nameの厳密チェックを無効にしてください。

    awplus(config)# interface tunnel0
    awplus(config-if)# no tunnel openvpn verify-client-certificate strict-common-name-check

クライアント証明書の準備など、クライアント側に必要な設定については「証明書の準備と配布 > クライアント証明書認証が有効な場合」をご覧ください。

## 証明書の準備と配布

OpenVPNでは電子証明書を利用して接続相手の確認（認証）を行うため、サーバー・クライアントにそれぞれ下記の証明書がインストールされている必要があります。

| クライアント証明書認証
| 無効（初期設定） | 有効
OpenVPNサーバー（本製品） | CA証明書、サーバー証明書 | CA証明書、サーバー証明書
OpenVPNクライアント | CA証明書 | CA証明書、クライアント証明書

クライアント証明書認証の有効・無効により必要な証明書やサポートする発行元CAの要件が異なります。

- クライアント証明書認証が無効な場合（初期設定）はローカルCA機能によって発行した証明書のみサポートとなります。
  - CA証明書、サーバー証明書とも、ローカルCA機能によって発行したものを使う
- クライアント証明書認証が有効な場合はローカルCA、外部CAのどちらで発行された証明書もサポートします。
  サポートするパターンは以下のとおりです。
  - CA証明書、サーバー証明書、クライアント証明書とも、ローカルCA機能によって発行したものを使う
  - CA証明書、サーバー証明書、クライアント証明書とも、外部CAによって発行したものを使う

以下、それぞれのケースについて、必要な証明書を準備してOpenVPNクライアントに（ユーザー）に配布する方法を説明します。

### クライアント証明書認証が無効な場合

クライアント証明書認証が無効な場合（初期設定）、サーバー・クライアントに必要な証明書は以下のとおりです。

OpenVPNサーバー（本製品） | CA証明書、サーバー証明書
OpenVPNクライアント | CA証明書

クライアント証明書認証の無効時は、CA証明書、サーバー証明書とも、ローカルCA機能によって発行した証明書のみサポートとなります。

- クライアントのユーザー名・パスワード認証にローカルRADIUSサーバー機能を使用する場合、これらの証明書はローカルRADIUSサーバーをセットアップする過程で自動的に生成されます。
- 一方、クライアントのユーザー名・パスワード認証に外部RADIUSサーバーまたはLDAPサーバーを使用する場合は環境によって状況が異なるため、前項「外部のRADIUS/LDAPサーバーを使用する場合」を参照し、必要な証明書が存在しているかどうかを確認し、不足している場合は手動で生成してください。

サーバー証明書は上記手順にしたがい生成するだけで使用可能ですが、CA証明書は、本製品からPEM形式のテキストデータとして出力し、以下のいずれかの方法で各OpenVPNクライアント（ユーザー）に配布する必要があります。

- クライアント設定ファイルとCA証明書ファイルを別ファイルとしてクライアントに配布する
- クライアント設定ファイル内にCA証明書のデータを埋め込んで配布する

以下、それぞれの方法を説明します。

#### クライアント設定ファイルとCA証明書ファイルを別ファイルとしてクライアントに配布する

CA証明書をクライアント設定ファイルとは別のファイルとしてエクスポートした上で、各OpenVPNクライアント（ユーザー）に配布する場合は、以下の手順を実行します。
なお、必要な証明書は生成済みであると仮定します。

1. 次のいずれかの方法でCA証明書をPEM形式ファイルとして保存します。
   - crypto pki export pemコマンドをterminalキーワード付きで実行し、その出力をコピー＆ペーストなどでPC上のファイル（たとえば「cacert.pem」）として保存する。

         awplus# crypto pki export local pem terminal
         -----BEGIN CERTIFICATE-----
         MIIDdDCCAlygAwIBAgIJAMiyUsFb3mfKMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
         BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
         c0NBQTA1MDQ5MDAwMDAwMDAwMDAeFw0xNTA3MzAxMjI3NDhaFw0yNTA3MjcxMjI3
         NDhaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB
         bGxpZWRXYXJlUGx1c0NBQTA1MDQ5MDAwMDAwMDAwMDCCASIwDQYJKoZIhvcNAQEB
         BQADggEPADCCAQoCggEBAO1PtX5iOAP8fIOwHy1Gb1D2ZnNTGDVA/6/mWE7UJCU2
         RA2pk6nwcTSyKtFIHKYMW+Zfu+K07NZzoNIENwVJoPSwdI4kSAVu6NBnWvQyTd1e
         yOvia6saU743p7eeiAUNOBNEFHw10wjvH0bG/8XdYZ+ZsKUroIozSKrakh0uCT/H
         /luAEAwuTNRxWWyfyNKOjCfC7eunPREubyVeKhnVdjZOYJllzf7y62baxfFmmRx3
         FhzYZ8fI7fgvsZXmOu648jlEJzZvB+NT2hIc6Zrr/OQdpvfpa1R1e84RYcdQpI84
         QjzDkxKj5xXGR25PqIqbm1Hha49HbgGLP1RgfWfPircCAwEAAaNdMFswHQYDVR0O
         BBYEFDKQyulFnc+P+cKNyoSUq2DiBCyvMB8GA1UdIwQYMBaAFDKQyulFnc+P+cKN
         yoSUq2DiBCyvMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
         CwUAA4IBAQDsLgLmtZTLutmwQn9IvVxMHOZt1lR55y4Ol2gaScb2qUZ8Ow8+AxXA
         NfPevFPXwhs+0KwidOeJi1qrnBsbkrhea2T6AD13yHjLi+V/9xoL4QNaoP1C76e/
         afYadCePY5KTcBw3J1uqZiIIZ8ZnuNLbWUEQPGoQhEwL2wbU1iQH9Xl1VfZZU477
         bKgcQ/xwAn41MzH2kwbfe4iNfVhD6rcoFmFt+6x61oK/lsdyGHcJcXeR549Oaq6r
         a3J7+poja/k6P95uGKNq9gYIOkyATryot917Fjby16P3THmdg/eNlHPSpEExAnW0
         5ZIw3kPC6CWlYqzYGLya73Ogh66h0Qra
         -----END CERTIFICATE-----

     上記操作により端末画面に表示された内容をPC上のテキストエディターなどにコピー＆ペーストして保存します。
     Note

     コピーするのは、`-----BEGIN CERTIFICATE-----` から `-----END CERTIFICATE-----` の行までだけでかまいません（他の行を含んでいても問題はありません）。

   - crypto pki export pemコマンドで本製品のファイルシステムにCA証明書をPEM形式で書き出し（この例では「flash:/cacert.pem」としてエクスポート）、そのファイルをcopyコマンドでサーバーなどにリモートコピーする。

         awplus# crypto pki export local pem cacert.pem
         Copying...
         Successful operation
         awplus# dir
               2917 -rw- Apr  2 2015 07:19:09  cacert.pem
               1193 -rw- Apr  2 2015 07:14:51  default.cfg
           39419519 -rw- Mar 24 2015 05:13:51  AR4050S-5.4.5-0.1.rel
         awplus# copy cacert.pem scp://zein@public.example.com/tmp/

2. 手順1の操作によりPCやサーバー上に保存したPEM形式のCA証明書ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。
3. OpenVPNクライアントの設定ファイルでは、配布されたPEM形式のCA証明書ファイルを「ca」パラメーターで指定してください。

       ca cacert.pem

#### クライアント設定ファイル内にCA証明書のデータを埋め込んで配布する

前項の説明では、クライアント設定ファイルとCA証明書ファイルを別ファイルとしてクライアントに配布していましたが、クライアント設定ファイル内にCA証明書を埋め込み、1つのファイルとして配布することも可能です。
以下、その手順を説明します。
なお、必要な証明書は生成済みであると仮定します。

1. crypto pki export pemコマンドをterminalキーワード付きで実行し、その出力をコピーする。

       awplus# crypto pki export local pem terminal
       -----BEGIN CERTIFICATE-----
       MIIDdDCCAlygAwIBAgIJAMiyUsFb3mfKMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
       BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
       c0NBQTA1MDQ5MDAwMDAwMDAwMDAeFw0xNTA3MzAxMjI3NDhaFw0yNTA3MjcxMjI3
       NDhaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB
       bGxpZWRXYXJlUGx1c0NBQTA1MDQ5MDAwMDAwMDAwMDCCASIwDQYJKoZIhvcNAQEB
       BQADggEPADCCAQoCggEBAO1PtX5iOAP8fIOwHy1Gb1D2ZnNTGDVA/6/mWE7UJCU2
       RA2pk6nwcTSyKtFIHKYMW+Zfu+K07NZzoNIENwVJoPSwdI4kSAVu6NBnWvQyTd1e
       yOvia6saU743p7eeiAUNOBNEFHw10wjvH0bG/8XdYZ+ZsKUroIozSKrakh0uCT/H
       /luAEAwuTNRxWWyfyNKOjCfC7eunPREubyVeKhnVdjZOYJllzf7y62baxfFmmRx3
       FhzYZ8fI7fgvsZXmOu648jlEJzZvB+NT2hIc6Zrr/OQdpvfpa1R1e84RYcdQpI84
       QjzDkxKj5xXGR25PqIqbm1Hha49HbgGLP1RgfWfPircCAwEAAaNdMFswHQYDVR0O
       BBYEFDKQyulFnc+P+cKNyoSUq2DiBCyvMB8GA1UdIwQYMBaAFDKQyulFnc+P+cKN
       yoSUq2DiBCyvMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
       CwUAA4IBAQDsLgLmtZTLutmwQn9IvVxMHOZt1lR55y4Ol2gaScb2qUZ8Ow8+AxXA
       NfPevFPXwhs+0KwidOeJi1qrnBsbkrhea2T6AD13yHjLi+V/9xoL4QNaoP1C76e/
       afYadCePY5KTcBw3J1uqZiIIZ8ZnuNLbWUEQPGoQhEwL2wbU1iQH9Xl1VfZZU477
       bKgcQ/xwAn41MzH2kwbfe4iNfVhD6rcoFmFt+6x61oK/lsdyGHcJcXeR549Oaq6r
       a3J7+poja/k6P95uGKNq9gYIOkyATryot917Fjby16P3THmdg/eNlHPSpEExAnW0
       5ZIw3kPC6CWlYqzYGLya73Ogh66h0Qra
       -----END CERTIFICATE-----

   Note

   コピーするのは、`-----BEGIN CERTIFICATE-----` から `-----END CERTIFICATE-----` の行までだけでかまいません。

2. クライアント設定ファイル内に手順1でコピーした内容をペーストします。
   また、ペーストした内容の直前の行には <ca> を、直後の行には </ca> を記述してください。

       <ca>
       -----BEGIN CERTIFICATE-----
       MIIDdDCCAlygAwIBAgIJAMiyUsFb3mfKMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
       BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
       c0NBQTA1MDQ5MDAwMDAwMDAwMDAeFw0xNTA3MzAxMjI3NDhaFw0yNTA3MjcxMjI3
       NDhaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB
       bGxpZWRXYXJlUGx1c0NBQTA1MDQ5MDAwMDAwMDAwMDCCASIwDQYJKoZIhvcNAQEB
       BQADggEPADCCAQoCggEBAO1PtX5iOAP8fIOwHy1Gb1D2ZnNTGDVA/6/mWE7UJCU2
       RA2pk6nwcTSyKtFIHKYMW+Zfu+K07NZzoNIENwVJoPSwdI4kSAVu6NBnWvQyTd1e
       yOvia6saU743p7eeiAUNOBNEFHw10wjvH0bG/8XdYZ+ZsKUroIozSKrakh0uCT/H
       /luAEAwuTNRxWWyfyNKOjCfC7eunPREubyVeKhnVdjZOYJllzf7y62baxfFmmRx3
       FhzYZ8fI7fgvsZXmOu648jlEJzZvB+NT2hIc6Zrr/OQdpvfpa1R1e84RYcdQpI84
       QjzDkxKj5xXGR25PqIqbm1Hha49HbgGLP1RgfWfPircCAwEAAaNdMFswHQYDVR0O
       BBYEFDKQyulFnc+P+cKNyoSUq2DiBCyvMB8GA1UdIwQYMBaAFDKQyulFnc+P+cKN
       yoSUq2DiBCyvMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
       CwUAA4IBAQDsLgLmtZTLutmwQn9IvVxMHOZt1lR55y4Ol2gaScb2qUZ8Ow8+AxXA
       NfPevFPXwhs+0KwidOeJi1qrnBsbkrhea2T6AD13yHjLi+V/9xoL4QNaoP1C76e/
       afYadCePY5KTcBw3J1uqZiIIZ8ZnuNLbWUEQPGoQhEwL2wbU1iQH9Xl1VfZZU477
       bKgcQ/xwAn41MzH2kwbfe4iNfVhD6rcoFmFt+6x61oK/lsdyGHcJcXeR549Oaq6r
       a3J7+poja/k6P95uGKNq9gYIOkyATryot917Fjby16P3THmdg/eNlHPSpEExAnW0
       5ZIw3kPC6CWlYqzYGLya73Ogh66h0Qra
       -----END CERTIFICATE-----
       </ca>

   Note

   この場合、クライアント設定ファイル内でCA証明書ファイルを指定する「ca」パラメーターを使用する必要はありません。

3. 上記手順により作成したクライアント設定ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。

### クライアント証明書認証が有効な場合

クライアント証明書認証が有効な場合、サーバー・クライアントに必要な証明書は以下のとおりです。

OpenVPNサーバー（本製品） | CA証明書、サーバー証明書
OpenVPNクライアント | CA証明書、クライアント証明書

クライアント証明書認証の有効時は、ローカルCA、外部CAのどちらによって発行された証明書もサポートしますが、次に示すように使用する証明書はすべて同一のCAから発行されている必要があります。

- CA証明書、サーバー証明書、クライアント証明書とも、ローカルCA機能によって発行したものを使う
- CA証明書、サーバー証明書、クライアント証明書とも、外部CAによって発行したものを使う

以下、それぞれのケースについて、必要な証明書を準備してOpenVPNクライアントに（ユーザー）に配布する方法を説明します。

#### ローカルCA発行の証明書を使う場合

- クライアントのユーザー名・パスワード認証にローカルRADIUSサーバー機能を使用する場合、CA証明書とサーバー証明書はローカルRADIUSサーバーをセットアップする過程で自動的に生成されます。
- 一方、クライアントのユーザー名・パスワード認証に外部RADIUSサーバーまたはLDAPサーバーを使用する場合は環境によって状況が異なるため、前項「外部のRADIUS/LDAPサーバーを使用する場合」を参照し、必要な証明書（CA証明書とサーバー証明書）が存在しているかどうかを確認し、不足している場合は手動で生成してください。

OpenVPNサーバー（本製品）側は上記手順にしたがいCA証明書とサーバー証明書を生成するだけで準備完了ですが、OpenVPNクライアント側については、別途ローカルCA機能によってクライアント証明書を発行し、CA証明書とともにPKCS12形式のファイルとして出力して各OpenVPNクライアント（ユーザー）に配布する必要があります。
以下、そのための手順を説明します。

1. 各ユーザーのクライアント証明書を発行します。
   crypto pki enroll userコマンドで発行対象のユーザー名を指定してください。
   ローカルRADIUSサーバーを使用する場合はローカルRADIUSサーバーに登録済みのユーザー名を、外部RADIUSサーバーまたはLDAPサーバーを使用する場合は該当サーバーに登録されているユーザー名を指定します。
   これにより、該当ユーザーのクライアント証明書（ユーザー証明書）が発行され、秘密鍵とともにローカルCA用のトラストポイントに格納されます。
   なお、同コマンドの実行時には、クライアント証明書の書き出し時にファイルを暗号化するためのパスワードを聞かれるため、確認を含め2回同じパスワード文字列を入力してください。空文字列や「abort」を入力した場合、および、入力した文字列が一致しない場合は発行が中止されます。

       awplus# crypto pki enroll local user userA
       Enter an export passphrase, or "abort" to cancel.
       XXXXXXXXXXXX （実際には表示されません）
       Enter the export passphrase again.
       XXXXXXXXXXXX （実際には表示されません）
       Generating a user private key for "userA"...
       Successfully enrolled user "userA".
       The PKCS#12 file is ready to export.

2. 前の手順で発行したクライアント証明書と秘密鍵、ローカルCAのルートCA証明書をPKCS#12形式ファイルとして書き出します。
   crypto pki export pkcs12コマンドで書き出し先のファイル名を指定してください。

       awplus# crypto pki export local pkcs12 userA flash:/userA.p12

3. 書き出したPKCS#12形式ファイル（ここではflash:/userA.p12）をopensslコマンドが利用可能なPCに転送します。
4. PC（ここではLinux PCを想定）上でopensslコマンドのpkcs12サブコマンドを利用して、PKCS#12形式ファイルからクライアント証明書、クライアント秘密鍵、CA証明書をそれぞれPEM形式のテキストとして取り出します。
   同コマンド実行時の「Enter Import Password:」に対しては、crypto pki enroll userコマンド実行時に指定したパスワードを入力してください。

       LinuxPC$ openssl pkcs12 -in userA.p12 -nodes
       Enter Import Password: XXXXXXXXXXXX （実際には表示されません）

5. 前記pkcs12サブコマンドを実行して正しいパスワードを入力すると、次のようにクライアント証明書、CA証明書、クライアント秘密鍵の内容が端末画面に出力されるので、それぞれをクライアント設定ファイル内にペーストして適切なタグを追加します。
   - クライアント証明書（openssl pkcs12サブコマンドの表示）

         Bag Attributes
             friendlyName: userA
             localKeyID: 5D A7 36 79 DD 9B FF FB A0 36 5C 91 DC 9E B8 BF 08 79 25 71
         subject=O = AlliedWare Plus, CN = userA

         issuer=O = "Allied Telesis, Inc.", CN = AlliedWarePlusCAC6FDB7839B8348B1

         -----BEGIN CERTIFICATE-----
         MIIDZjCCAk6gAwIBAgIJAPbTuArUiH2aMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
         BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
         c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMzA0MjIwMzU3NDRaFw0yODA0MjAwMzU3
         NDRaMCoxGDAWBgNVBAoMD0FsbGllZFdhcmUgUGx1czEOMAwGA1UEAwwFdXNlckEw
         ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKmvdAxLz+deEsBy7uYcIA
         ...
         vhcZMW9XIga3YQ==
         -----END CERTIFICATE-----

     表示された内容のうち`-----BEGIN CERTIFICATE-----` から `-----END CERTIFICATE-----` の行までをコピーし、クライアント設定ファイル内にペーストします。
     ペーストした内容の直前の行には <cert> を、直後の行には </cert> を記述してください。
     [クライアント設定ファイル]

         <cert>
         -----BEGIN CERTIFICATE-----
         MIIDZjCCAk6gAwIBAgIJAPbTuArUiH2aMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
         BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
         c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMzA0MjIwMzU3NDRaFw0yODA0MjAwMzU3
         NDRaMCoxGDAWBgNVBAoMD0FsbGllZFdhcmUgUGx1czEOMAwGA1UEAwwFdXNlckEw
         ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKmvdAxLz+deEsBy7uYcIA
         ...
         vhcZMW9XIga3YQ==
         -----END CERTIFICATE-----
         </cert>

   - CA証明書（openssl pkcs12サブコマンドの表示）

         Bag Attributes: <No Attributes>
         subject=O = "Allied Telesis, Inc.", CN = AlliedWarePlusCAC6FDB7839B8348B1

         issuer=O = "Allied Telesis, Inc.", CN = AlliedWarePlusCAC6FDB7839B8348B1

         -----BEGIN CERTIFICATE-----
         MIIDdDCCAlygAwIBAgIJAN8HeNbORdmzMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
         BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
         c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMjA4MDkwNjU5NDZaFw0zMjA4MDYwNjU5
         NDZaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB
         bGxpZWRXYXJlUGx1c0NBQzZGREI3ODM5QjgzNDhCMTCCASIwDQYJKoZIhvcNAQEB
         ...
         NI2r2/BsMGFZDm185o1u37AlaKz7Jssj
         -----END CERTIFICATE-----

     表示された内容のうち`-----BEGIN CERTIFICATE-----` から `-----END CERTIFICATE-----` の行までをコピーし、クライアント設定ファイル内にペーストします。
     ペーストした内容の直前の行には <ca> を、直後の行には </ca> を記述してください。
     [クライアント設定ファイル]

         <ca>
         -----BEGIN CERTIFICATE-----
         MIIDdDCCAlygAwIBAgIJAN8HeNbORdmzMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
         BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
         c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMjA4MDkwNjU5NDZaFw0zMjA4MDYwNjU5
         NDZaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB
         bGxpZWRXYXJlUGx1c0NBQzZGREI3ODM5QjgzNDhCMTCCASIwDQYJKoZIhvcNAQEB
         ...
         NI2r2/BsMGFZDm185o1u37AlaKz7Jssj
         -----END CERTIFICATE-----
         </ca>

   - クライアント秘密鍵（openssl pkcs12サブコマンドの表示）

         Bag Attributes
             friendlyName: userA
             localKeyID: 5D A7 36 79 DD 9B FF FB A0 36 5C 91 DC 9E B8 BF 08 79 25 71
         Key Attributes: <No Attributes>
         -----BEGIN PRIVATE KEY-----
         MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDKmvdAxLz+deEs
         By7uYcIAD4XHJAQp9JnCPts+HEypCT6EbHURuf7Fgq4K+31JFo4vaQwUj/HR13Wb
         zRXBlBomcj7ClxXZ+40zlkIqK8ktV5CFEh9aZY6rBJIH6Mz/YYdFqv6wko9Z51Tm
         sRxab0NCREJz+or+GOZZwzi8xMssuazgmzTL05IBGNCf7JxIgMkDfBirJh4UH0hS
         o4AxDTFpubowMtV66+KNy2rXDXFeXCGcCL8VhCpv+BU61Q+xgQ37uexEvHGPrDDk
         ...
         XF+KgN13JEFZbPwoxZYlk/4=
         -----END PRIVATE KEY-----

     表示された内容のうち`-----BEGIN PRIVATE KEY-----` から `-----END PRIVATE KEY-----` の行までをコピーし、クライアント設定ファイル内にペーストします。
     ペーストした内容の直前の行には <key> を、直後の行には </key> を記述してください。
     [クライアント設定ファイル]

         <key>
         -----BEGIN PRIVATE KEY-----
         MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDKmvdAxLz+deEs
         By7uYcIAD4XHJAQp9JnCPts+HEypCT6EbHURuf7Fgq4K+31JFo4vaQwUj/HR13Wb
         zRXBlBomcj7ClxXZ+40zlkIqK8ktV5CFEh9aZY6rBJIH6Mz/YYdFqv6wko9Z51Tm
         sRxab0NCREJz+or+GOZZwzi8xMssuazgmzTL05IBGNCf7JxIgMkDfBirJh4UH0hS
         o4AxDTFpubowMtV66+KNy2rXDXFeXCGcCL8VhCpv+BU61Q+xgQ37uexEvHGPrDDk
         ...
         XF+KgN13JEFZbPwoxZYlk/4=
         -----END PRIVATE KEY-----
         </key>

6. 上記手順により作成したクライアント設定ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。

Note

ローカルCAでは証明書失効リスト（CRL）の発行をサポートしていないため、ユーザー証明書を無効にするには、ローカルCAの再セットアップが必要となります（crypto pki trustpointコマンドをno形式、通常形式の順に実行後、機器を再起動する）。なお、ローカルCAを再セットアップすると、それ以前に発行した証明書はすべて無効になり、再発行が必要になるので注意してください。

#### 外部CA発行の証明書を使う場合

外部CA発行の証明書を使ってクライアント証明書認証を行う場合は、サーバー証明書とクライアント証明書（ユーザー証明書）を同じ外部CAから発行する必要があります。
以下、外部CA発行の証明書を使う場合の設定手順を説明します。

1. 外部CA用トラストポイント「openvpn_certs」を作成します。
   これには、crypto pki trustpoint、enrollmentコマンドを使います。

       awplus(config)# crypto pki trustpoint openvpn_certs
       Created trustpoint "openvpn_certs".
       awplus(ca-trustpoint)# enrollment terminal
       awplus(ca-trustpoint)# end

2. 外部CAの証明書をインポートします。
   crypto pki authenticateコマンドを実行すると「Paste the certificate PEM file into the terminal. Type "abort" to cancel.」のようなメッセージが表示されて入力待ちになるので、利用する外部CAのルート証明書ファイル（PEM形式）をテキストエディターで開き、`-----BEGIN CERTIFICATE-----` から `-----END CERTIFICATE-----` の行までをコピー＆ペーストして、「Enter」キーを押します。
   証明書の概要が表示されたら内容を確認し、「Accept this certificate?」に「y」で答えてください。

       awplus# crypto pki authenticate openvpn_certs
       Paste the certificate PEM file into the terminal.
       Type "abort" to cancel.
       -----BEGIN CERTIFICATE-----
       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
       ...
       xaPuyjGcQ3kCjW32sO0InQxjLPCp/celKKRZbIwETAor
       -----END CERTIFICATE-----
       Complete ("END CERTIFICATE" detected).
       Subject     : /C=JP/O=EXAMPLE/CN=SampleRootCA
       Issuer      : /C=JP/O=EXAMPLE/CN=SampleRootCA
       Algorithms  : Public Key : rsaEncryption, 2048 bits
                   : Signature  : sha256WithRSAEncryption
       Valid From  : Apr  7 05:32:30 2023 GMT
       Valid To    : Apr  4 05:32:30 2033 GMT
       Fingerprint : D51BB535 8CBCFE2C BDD6E56B 759BB5C9 4CF9DCBF
       This is a self-signed CA certificate.
       The certificate has been validated successfully.
       Accept this certificate? (y/n): y
       Successfully authenticated trustpoint "openvpn_certs".

3. 次に本製品のサーバー証明書の署名要求（CSR）の生成します。
   crypto pki enrollコマンドを実行すると次のようにCSRの内容が出力されるので、 `-----BEGIN CERTIFICATE REQUEST-----` から `-----END CERTIFICATE REQUEST-----` の行までをクリップボードにコピーしてPC上のファイル（ここでは「openvpn_server_csr.pem」とします）に保存してください。

       awplus# crypto pki enroll openvpn_certs
       Using private key "server-default"...
       Cut and paste this request to the certificate authority:
       -----------------------------------------------------------------
       -----BEGIN CERTIFICATE REQUEST-----
       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
       ...
       sQCD7gbOkrMSEpDCSdB85P5on2Gs+CwpHsYlhA==
       -----END CERTIFICATE REQUEST-----
       -----------------------------------------------------------------

4. 外部CAにサーバー証明書の発行を依頼します。
   前の手順でPC上に保存したCSRファイル（本例ではopenvpn_server_csr.pem）を外部CAに渡し、サーバー証明書の発行を依頼してください。
   ここでは、外部CAが発行した本製品のサーバー証明書を openvpn_server_cert.pem という名前のファイルとして入手したものと仮定します。
5. 発行されたサーバー証明書をインポートします。
   crypto pki import pemコマンドを実行すると「Paste the certificate PEM file into the terminal. Type "abort" to cancel.」のようなメッセージが表示されて入力待ちになるので、外部CAから入手した本製品のサーバー証明書ファイル（PEM形式）をテキストエディターで開き、`-----BEGIN CERTIFICATE-----` から `-----END CERTIFICATE-----` の行までをコピー＆ペーストして、「Enter」キーを押します。
   証明書の概要が表示されたら内容を確認し、「Accept this certificate?」に「y」で答えてください。

       awplus# crypto pki import openvpn_certs pem terminal
       Paste the certificate PEM file into the terminal.
       Type "abort" to cancel.
       -----BEGIN CERTIFICATE-----
       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
       ...
       WF/C9/ijoy0UIjDFJms6uBo5gw==
       -----END CERTIFICATE-----

       Complete ("END CERTIFICATE" detected).
       Subject     : /C=JP/O=EXAMPLE/CN=OpenVPNServer
       Issuer      : /C=JP/O=EXAMPLE/CN=SampleRootCA
       Algorithms  : Public Key : rsaEncryption, 2048 bits
                   : Signature  : sha256WithRSAEncryption
       Valid From  : Apr 19 07:41:24 2023 GMT
       Valid To    : Apr 18 07:41:24 2024 GMT
       Fingerprint : FAB1FC57 6CD0DC6A 7198C3F2 67E37C0F 6FAE8AFB
       This is not a valid CA certificate. Attempting to import as a server certificate.
       The certificate has been validated successfully.
       Accept this certificate? (y/n): y
       The certificate was successfully imported.

6. 外部CAに各ユーザーのクライアント証明書の発行を依頼します。
   その際、クライアント証明書のCommon Name（CN）がOpenVPNユーザー名と一致するようにしてください。
   Note

   tunnel openvpn verify-client-certificate strict-common-name-checkコマンドを設定する場合は一致しなくてもかまいません。

   ここでは、外部CAにOpenVPNユーザー「userA」のクライアント証明書の発行を依頼し、userA.p12という名前のPKCS#12形式ファイルを入手したものと仮定します。同ファイルにはクライアント証明書とクライアント秘密鍵に加え、外部CA自身の証明書も含まれているものとします。
7. 証明書と秘密鍵をPKCS#12形式からPEM形式に変換します。
   PC（ここではLinux PCを想定）上でopensslコマンドのpkcs12サブコマンドを利用して、PKCS#12形式ファイルからクライアント証明書、クライアント秘密鍵、CA証明書をそれぞれPEM形式のテキストとして取り出します。
   同コマンド実行時の「Enter Import Password:」に対しては、外部CAから通知されたパスワードを入力してください。

       LinuxPC$ openssl pkcs12 -in userA.p12 -nodes
       Enter Import Password: XXXXXXXXXXXX （実際には表示されません）

   Note

   クライアント証明書、クライアント秘密鍵、CA証明書をPEM形式で入手・保持している場合、本手順は不要です。

8. 前記pkcs12サブコマンドを実行して正しいパスワードを入力すると、次のようにクライアント証明書、CA証明書、クライアント秘密鍵の内容が端末画面に出力されるので、それぞれをクライアント設定ファイル内にペーストして適切なタグを追加します。
   Note

   クライアント証明書、クライアント秘密鍵、CA証明書をPEM形式で入手・保持している場合は、各ファイルの内容を適宜ペーストしてください。

   - クライアント証明書（openssl pkcs12サブコマンドの表示）

         Bag Attributes
             friendlyName: userA
             localKeyID: 5D A7 36 79 DD 9B FF FB A0 36 5C 91 DC 9E B8 BF 08 79 25 71
         subject=C = JP, O = EXAMPLE, CN = userA

         issuer=C = JP, O = EXAMPLE, CN = SampleRootCA

         -----BEGIN CERTIFICATE-----
         MIIDZjCCAk6gAwIBAgIJAPbTuArUiH2aMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
         BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
         c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMzA0MjIwMzU3NDRaFw0yODA0MjAwMzU3
         NDRaMCoxGDAWBgNVBAoMD0FsbGllZFdhcmUgUGx1czEOMAwGA1UEAwwFdXNlckEw
         ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKmvdAxLz+deEsBy7uYcIA
         ...
         vhcZMW9XIga3YQ==
         -----END CERTIFICATE-----

     表示された内容のうち`-----BEGIN CERTIFICATE-----` から `-----END CERTIFICATE-----` の行までをコピーし、クライアント設定ファイル内にペーストします。
     ペーストした内容の直前の行には <cert> を、直後の行には </cert> を記述してください。
     [クライアント設定ファイル]

         <cert>
         -----BEGIN CERTIFICATE-----
         MIIDZjCCAk6gAwIBAgIJAPbTuArUiH2aMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
         BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
         c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMzA0MjIwMzU3NDRaFw0yODA0MjAwMzU3
         NDRaMCoxGDAWBgNVBAoMD0FsbGllZFdhcmUgUGx1czEOMAwGA1UEAwwFdXNlckEw
         ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKmvdAxLz+deEsBy7uYcIA
         ...
         vhcZMW9XIga3YQ==
         -----END CERTIFICATE-----
         </cert>

   - CA証明書（openssl pkcs12サブコマンドの表示）

         Bag Attributes: <No Attributes>
         subject=C = JP, O = EXAMPLE, CN = SampleRootCA

         issuer=C = JP, O = EXAMPLE, CN = SampleRootCA

         -----BEGIN CERTIFICATE-----
         MIIDdDCCAlygAwIBAgIJAN8HeNbORdmzMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
         BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
         c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMjA4MDkwNjU5NDZaFw0zMjA4MDYwNjU5
         NDZaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB
         bGxpZWRXYXJlUGx1c0NBQzZGREI3ODM5QjgzNDhCMTCCASIwDQYJKoZIhvcNAQEB
         ...
         NI2r2/BsMGFZDm185o1u37AlaKz7Jssj
         -----END CERTIFICATE-----

     表示された内容のうち`-----BEGIN CERTIFICATE-----` から `-----END CERTIFICATE-----` の行までをコピーし、クライアント設定ファイル内にペーストします。
     ペーストした内容の直前の行には <ca> を、直後の行には </ca> を記述してください。
     [クライアント設定ファイル]

         <ca>
         -----BEGIN CERTIFICATE-----
         MIIDdDCCAlygAwIBAgIJAN8HeNbORdmzMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
         BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
         c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMjA4MDkwNjU5NDZaFw0zMjA4MDYwNjU5
         NDZaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB
         bGxpZWRXYXJlUGx1c0NBQzZGREI3ODM5QjgzNDhCMTCCASIwDQYJKoZIhvcNAQEB
         ...
         NI2r2/BsMGFZDm185o1u37AlaKz7Jssj
         -----END CERTIFICATE-----
         </ca>

   - クライアント秘密鍵（openssl pkcs12サブコマンドの表示）

         Bag Attributes
             friendlyName: userA
             localKeyID: 5D A7 36 79 DD 9B FF FB A0 36 5C 91 DC 9E B8 BF 08 79 25 71
         Key Attributes: <No Attributes>
         -----BEGIN PRIVATE KEY-----
         MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDKmvdAxLz+deEs
         By7uYcIAD4XHJAQp9JnCPts+HEypCT6EbHURuf7Fgq4K+31JFo4vaQwUj/HR13Wb
         zRXBlBomcj7ClxXZ+40zlkIqK8ktV5CFEh9aZY6rBJIH6Mz/YYdFqv6wko9Z51Tm
         sRxab0NCREJz+or+GOZZwzi8xMssuazgmzTL05IBGNCf7JxIgMkDfBirJh4UH0hS
         o4AxDTFpubowMtV66+KNy2rXDXFeXCGcCL8VhCpv+BU61Q+xgQ37uexEvHGPrDDk
         ...
         XF+KgN13JEFZbPwoxZYlk/4=
         -----END PRIVATE KEY-----

     表示された内容のうち`-----BEGIN PRIVATE KEY-----` から `-----END PRIVATE KEY-----` の行までをコピーし、クライアント設定ファイル内にペーストします。
     ペーストした内容の直前の行には <key> を、直後の行には </key> を記述してください。
     [クライアント設定ファイル]

         <key>
         -----BEGIN PRIVATE KEY-----
         MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDKmvdAxLz+deEs
         By7uYcIAD4XHJAQp9JnCPts+HEypCT6EbHURuf7Fgq4K+31JFo4vaQwUj/HR13Wb
         zRXBlBomcj7ClxXZ+40zlkIqK8ktV5CFEh9aZY6rBJIH6Mz/YYdFqv6wko9Z51Tm
         sRxab0NCREJz+or+GOZZwzi8xMssuazgmzTL05IBGNCf7JxIgMkDfBirJh4UH0hS
         o4AxDTFpubowMtV66+KNy2rXDXFeXCGcCL8VhCpv+BU61Q+xgQ37uexEvHGPrDDk
         ...
         XF+KgN13JEFZbPwoxZYlk/4=
         -----END PRIVATE KEY-----
         </key>

9. 上記手順により作成したクライアント設定ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。

## iOS版クライアントを使用する場合

iOS版のOpenVPNクライアントを使用する場合は、クライアント設定ファイルを次のように記述してください。

### クライアント設定ファイルの変更

iOS版クライアントで経路情報の設定を行うには、クライアント設定ファイル（.ovpnファイル）を下記のとおり変更してください。

- 削除

      # 経路情報等をサーバーから取得する
      pull

      # TLSクライアントを有効にする
      tls-client

- 追加

      # TLSクライアントを有効にする
      client

      # クライアント証明書
      setenv CLIENT_CERT 0

      # 経路情報
      route 192.168.10.0 255.255.255.0

Note

上記の設定ファイル例は参考のために示した最小限の設定であり、動作を保証するものではありません。使用するクライアントやそのバージョン、OS、ネットワーク環境などによって必要な設定は異なりますので、あらかじめご了承ください。

## エンティティー定義にもとづく経路通知

OpenVPNクライアントに対し、VPN経由で到達可能なネットワークやホストへの経路を通知する方法には次のものがあります。

- (a) RADIUS属性Framed-Route
- (b) DHCPオプション121（Classless Static Route Option）（Tap(L2)の場合）
- (c) クライアント設定ファイルのrouteディレクティブ（iOS版クライアントの場合）
- (d) エンティティー定義

(a)～(c)については前記例のとおりです。ここでは(d)のエンティティー定義による経路通知について説明します。
エンティティー定義は、本製品においてサブネットやホストの集合を定義する設定要素です。
おもにファイアウォール、QoS、ポリシーベースルーティングなどの各機能において、制御・適用対象のトラフィック（送信元、宛先）を指定するために使用しますが、OpenVPNサーバー機能においては、接続してきたクライアントに通知する経路の集合を定義するために使用できます。
エンティティー定義方式では、他の形式と異なり、完全ホスト名（FQDN）でホスト経路を指定できる点が特徴的です。
Note

エンティティー定義にもとづく経路通知と他の方式の併用可否は以下のとおりです。

- (a) RADIUS属性Framed-Route
  併用可能。RADIUS属性で指定した経路とエンティティー定義内の経路がすべて通知されます。
- (b) DHCPオプション121（Classless Static Route Option）（Tap(L2)の場合）
  Windows版クライアント（OpenVPN GUI、vpnux Client）のみ併用可能。DHCPオプション121で指定した経路とエンティティー定義内の経路がすべて通知されます。
- (c) クライアント設定ファイルのrouteディレクティブ（iOS版クライアントの場合）
  併用できません。

### 設定方法

接続してきたOpenVPNクライアントに対し、エンティティー定義にもとづいて経路情報を通知するには次の設定を行います。

1. FQDNでホスト経路を指定する場合は、エンティティー定義解説ページのFQDNによる指定を参照の上、FQDNホスト定義を使用するために必要なDNS関連の設定を行ってください。FQDN指定のホスト経路を通知しない場合、本設定は不要です。
2. エンティティーを作成して通知する経路を定義します。
   具体的にはVPN経由で通信させたいサブネットやホストを定義します。
   たとえばクライアントに対して、プライベートなサブネット「10.25.0.0/16」とクラウドサービス上のサーバーホスト「cloud-server.example.com」宛ての通信をVPN経由で行わせたい場合は、次のようなエンティティーを定義します。
   Note

   エンティティー定義の詳細については「UTM」/「エンティティー定義」をご覧ください。

   Note

   サブネット定義ではインターフェースを指定しないでください。インターフェース指定付きサブネットは通知されません。

       awplus(config)# zone ovpn_routes
       awplus(config-zone)# network private
       awplus(config-network)# ip subnet 10.25.0.0/16
       awplus(config-network)# exit
       awplus(config-zone)# network public
       awplus(config-network)# host server
       awplus(config-host)# ip address dynamic fqdn cloud-server.example.com
       awplus(config-host)# exit
       awplus(config-network)# exit
       awplus(config-zone)# exit

3. OpenVPNトンネルインターフェースにおいて、接続してきたクライアントに対し、指定したエンティティー定義内のサブネットおよびホスト経路を通知するよう設定します。これにはtunnel openvpn routeコマンドを使います。
   Note

   ここではOpenVPNトンネルインターフェースとしての他の設定は省いています。利用環境にあわせて適宜設定してください。

       awplus(config)# interface tunnel0
       awplus(config-if)# tunnel openvpn route ovpn_routes

設定は以上です。
これにより本製品のOpenVPNサーバーは、OpenVPNクライアントが接続してきたときにエンティティー定義内のサブネットとホストへの経路を通知するようになります。
Note

エンティティー定義内の経路が通知されるのはOpenVPNクライアントが接続してきたときだけです。
OpenVPNクライアントの接続中にエンティティー定義の内容を変更しても経路情報の更新通知は行われません。
変更後に新規接続してきたOpenVPNクライアントには新しい経路情報が通知されます。

なお、FQDNで指定したホストへの経路（前記の例ではcloud-server.example.comへの経路）は、OpenVPNクライアントの接続時点において、本製品に接続されている他の端末が本製品のDNSリレー機能を通じてcloud-server.example.comのIPアドレスを解決（取得）済みの場合のみ、32ビットマスク経路（ホスト経路）として通知されます。FQDNが未解決の場合、該当ホスト経路は通知されません。

## ダウンロードポータル

OpenVPNユーザーにクライアント設定ファイルや接続用ソフトウェアを配布する際、本製品内蔵の認証付きWebサイト「ダウンロードポータル」を使用することもできます。詳しくは「Web GUI」/「ネットワークサービス」をご覧ください。