Softetherのサーバー/ユーザー認証を証明書認証に変更した

Amazon Linux

この記事でSoftetherによるVPNを構築しました。



このときはパスワード認証でしたので、より安全な証明書での認証に変更しました。

通常であればWindowsでの管理ツールでやるのが簡単なのでしょうが、私はWindows PCを持っていなかったので、vpncmdでのコマンド操作で実施しました。

サーバー認証

ユーザーがサーバーをサーバー証明書で認証するようにします。

サーバー側

まずサーバー証明書と秘密鍵を作成。
SoftetherにMakeCert/MakeCert2048という便利なコマンドがありますので、これを使います。
 MakeCertは鍵長が1024bit、MakeCert2048は鍵長が2048bitとのこと。
各フィールドは空(=none)でもOKなので、Enter連打。
期間は空にすると10年になるようです。

sudo /opt/vpnserver/vpncmd
(略)
1. Management of VPN Server or VPN Bridge 
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)

Select 1, 2 or 3: 1 (Enter)
(略)
Hostname of IP Address of Destination: localhost:5555 (Enter)
(略)
Specify Virtual Hub Name: (Enter)
(略)
VPN Server>MakeCert2048
MakeCert2048 command - Create New X.509 Certificate and Private Key (2048 bit)
Name of Certificate to Create (CN): (Enter)

Organization of Certificate to Create (O): (Enter)

Organization Unit of Certificate to Create (OU): (Enter)

Country of Certificate to Create (C): (Enter)

State of Certificate to Create (ST): (Enter)

Locale of Certificate to Create (L): (Enter)

Serial Number of Certificate to Create (Hexadecimal): (Enter)

Expiration Date of Certificate to Create (Days): (Enter)

File Name to Save Certificate to Create: /opt/vpnserver/server.cert

File Name to Save Private Key to Create: /opt/vpnserver/server.priv

The command completed successfully.



作った証明書と秘密鍵をサーバー認証用ファイルに指定します。

VPN Server>Hub virtual_hub
(略)
VPN Server/virtual_hub>ServerCertSet
ServerCertSet command - Set SSL Certificate and Private Key of VPN Server
Read X.509 certificate from file name: /opt/vpnserver/server.cert

Read private key from file name: /opt/vpnserver/server.priv

The command completed successfully.

この時点で証明書と秘密鍵は設定ファイルに直接書き込まれているので、指定した証明書ファイルと秘密鍵ファイルは削除して構いません。
復元したくなったらServerCertGetコマンドでファイルに書き戻せます。

ユーザー側

お次は作成した証明書をユーザーのホストにコピーし、サーバー認証で使うように設定します。

sudo /opt/vpnclient/vpncmd 
(略)
1. Management of VPN Server or VPN Bridge 
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)

Select 1, 2 or 3: 2 (Enter)
(略)
Hostname of IP Address of Destination: (Enter)
(略)
VPN Client>AccountServerCertEnable virtual_connection
AccountServerCertEnable command - Enable VPN Connection Setting Server Certificate Verification Option

The command completed successfully.

VPN Client>AccountServerCertSet virtual_connection
AccountServerCertSet command - Set Server Individual Certificate for VPN Connection Setting

Read X.509 certificate from file name: ./server.cert

The command completed successfully.



一度切断して再接続してみます。
どうやらうまく証明書での認証ができたようです。

VPN Client>AccountDisconnect virtual_connection
AccountDisconnect command - Disconnect VPN Connection Setting During Connection

The command completed successfully.

VPN Client>AccountConnect virtual_connection
AccountConnect command - Start Connection to VPN Server using VPN Connection Setting

The command completed successfully.

VPN Client>AccountStatusGet virtual_connection
AccountStatusGet command - Get Current VPN Connection Setting Status

Item                                      |Value
------------------------------------------+------------------------------------------------------------------------
VPN Connection Setting Name               |virtual_connection
Session Status                            |Connection Completed (Session Established)
(略)

VPN Client>AccountGet virtual_connection
AccountGet command - Get Setting of VPN Connection Setting 

Item                                                 |Value
-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------
(略)
Verify Server Certificate                            |Enable
Registered Server Individual Certificate             |, SERIAL="00" (Digest: MD5="12345678901234567890123456789012", SHA1="1234567890123456789012345678901234567890")
(略)

ユーザー認証

ユーザー認証も基本的には同じ流れでやれます。

サーバー側

MakeCert/MakeCert2048で証明書と秘密鍵を作成。
サーバー側では以下のようにしてユーザー証明書を認証に使うように指定。

VPN Server>Hub virtual_hub
(略)
VPN Server/virtual_hub>UserSignedSet
UserSignedSet command - Set Signed Certificate Authentication for User Auth Type
User Name: yasu

Limit of Common Name (CN) Value: 

Limit of Serial Number Value: 

The command completed successfully.

VPN Server/virtual_hub>UserCertSet
UserCertSet command - Set Individual Certificate Authentication for User Auth Type and Set Certificate
User Name: yasu

Read X.509 certificate from file name: /opt/vpnserver/yasu.cert

The command completed successfully.

ユーザー側

ユーザー側も同じように指定。

sudo /opt/vpnclient/vpncmd 
(略)
1. Management of VPN Server or VPN Bridge 
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)

Select 1, 2 or 3: 2 (Enter)
(略)
Hostname of IP Address of Destination: (Enter)
(略)
VPN Client>AccountCertSet virtual_connection
AccountCertSet command - Set User Authentication Type of VPN Connection Setting to Client Certificate Authentication

Read X.509 certificate from file name: /opt/vpnserver/yasu.cert

Read private key from file name: /opt/vpnclient/yasu.priv

The command completed successfully.



一度切断して接続し直します。
証明書による認証ができたみたいです。

VPN Client>AccountDisconnect virtual_connection
AccountDisconnect command - Disconnect VPN Connection Setting During Connection

The command completed successfully.

VPN Client>AccountConnect virtual_connection
AccountConnect command - Start Connection to VPN Server using VPN Connection Setting

The command completed successfully.

VPN Client>AccountStatusGet virtual_connection
AccountStatusGet command - Get Current VPN Connection Setting Status

Item                                      |Value
------------------------------------------+--------------------------------------------------------
VPN Connection Setting Name               |virtual_connection
Session Status                            |Connection Completed (Session Established)
(略)
VPN Client>AccountGet virtual_connection
AccountGet command - Get Setting of VPN Connection Setting 

Item                                                 |Value
-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------
VPN Connection Setting Name                          |virtual_connection
(略)
Authentication Type                                  |Client Certificate Authentication
User Name                                            |yasu
Client Certificate for Authentication Use            |, SERIAL="00" (Digest: MD5="12345678901234567890123456789012", SHA1="1234567890123456789012345678901234567890")
(略)



これでサーバー、ユーザー、ともに証明書での認証ができるようになりました!

終わりに

いかがでしたか。

証明書認証と聞くと構えてしまいますが、コマンドを数回打つだけでそれほど難しくないですよ!

Comments

タイトルとURLをコピーしました