接続構成
Windows 端末から NAT 配下のサーバにアクセスするため、SSL/TLS VPN の一種となる SSTP (Secure Socket Tunneling Protocol) を用いて同一の LAN セグメントに接続する。
ルータで使用する SSL サーバ証明書はプライベート認証局 (CA) で署名・発行する。発行したサーバ証明書 (RSA 公開鍵) 、および RSA 秘密鍵とプライベート認証局 (CA) の証明書 (RSA 公開鍵) をルータにインポートして利用する。
OpenSSL の使用環境
プライベート認証局 (CA) の OpenSSL は以下の環境のものを使用する。
作成ディレクトリ | /etc/pki/CA |
設定ファイル | /etc/pki/tls/openssl.cnf |
OpenSSL バージョン | 1.1.1k |
OS | Red Hat Enterprise Linux 8.7 |
サーバ証明書は別途作成したプライベート認証局 (CA) を利用して署名・発行する。
CA 証明書
秘密鍵のフォーマット | PKCS#1 (OpenSSL 1 系の標準) |
サブジェクト DN | O=Private Lab, CN=Private Root CA 01 |
X.509 エンコーディング形式 | PEM (Base64) |
サーバ証明書の発行
サーバ 証明書
有効期限 | 約2年 (730日) |
RSA 暗号の鍵長 | 4,096bit (約1,233桁 log2 x 4096) |
秘密鍵のフォーマット | PKCS#8 (OpenSSL 3.0 系の標準) |
サブジェクト DN | CN=vpn.vm.lab |
シリアル番号 | 自動生成 |
シリアル番号情報ファイル | /etc/pki/CA/serial |
X.509 エンコーディング形式 | PEM (Base64) |
X.509v3 拡張設定ファイル | vpn_ext.txt |
基本制約 | 重要【critical】 CA:FALSE |
鍵用途 | 重要【critical】 digitalSignature, keyEncipherment, keyAgreement |
拡張鍵用途 | serverAuth |
サブジェクトの別名 (SAN) | 【DNS】vpn.vm.lab 【IP】10.0.0.254 |
上記のサーバ証明書を発行する。この時、秘密鍵のフォーマットを【PKCS#8】となるように注意する。サブジェクトの別名を使用してマルチドメイン用の証明書を発行する。
※VyOS 1.4 系では OpenSSL 3.0 がインストールされているため、サーバ証明書の秘密鍵をインポートする際に【PKCS#8】形式である必要がある。
# mkdir /etc/pki/CA/server/private
# cd /etc/pki/CA/server
# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out ./private/vpn_key.pem
.....................................................++++
.................................................................................................................................................................++++
# cat ./private/vpn_key.pem
-----BEGIN PRIVATE KEY-----
MIIJQwIBADAN... (略)
-----END PRIVATE KEY-----
# openssl asn1parse -i -in ./private/vpn_key.pem
0:d=0 hl=4 l=2371 cons: SEQUENCE
4:d=1 hl=2 l= 1 prim: INTEGER :00
7:d=1 hl=2 l= 13 cons: SEQUENCE
9:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption
20:d=2 hl=2 l= 0 prim: NULL
22:d=1 hl=4 l=2349 prim: OCTET STRING [HEX DUMP]:30820929020... (略)
※ PKCS#1 の場合 (PKCS#8 から変換して確認)
# openssl rsa -in ./private/vpn_key.pem -out ./private/vpn_key_pcks1.pem
writing RSA key
# cat ./private/vpn_key_pcks1.pem
-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEAsfTKQR5oooYmOeeckG... (略)
-----END RSA PRIVATE KEY-----
# openssl asn1parse -i -in ./private/vpn_key_pcks1.pem
0:d=0 hl=4 l=2345 cons: SEQUENCE
4:d=1 hl=2 l= 1 prim: INTEGER :00
7:d=1 hl=4 l= 513 prim: INTEGER :B1F4CA411E68A2862639E... (略)
524:d=1 hl=2 l= 3 prim: INTEGER :010001
529:d=1 hl=4 l= 513 prim: INTEGER :867A5AE12CCE9B8ACE965... (略)
1046:d=1 hl=4 l= 257 prim: INTEGER :DC5954E20198427D7D2A4... (略)
1307:d=1 hl=4 l= 257 prim: INTEGER :CEBF963870F4F60767F99... (略)
1568:d=1 hl=4 l= 257 prim: INTEGER :CF4BFF4E2BFFE93593863... (略)
1829:d=1 hl=4 l= 256 prim: INTEGER :4DBE757A9BDF4174DF805... (略)
2089:d=1 hl=4 l= 256 prim: INTEGER :3E35C1E34489902FC9B21... (略)
サブジェクトの別名 (SAN) 等々、サーバ証明書に応じた個別設定の X.509v3 拡張設定ファイルを作成する。
# vi ./vpn_ext.txt
================================ vpn_ext.txt ================================
basicConstraints = critical, CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = DNS:vpn.vm.lab, IP:10.0.0.254
==============================================================================
署名リクエスト (CSR) を作成する。作成した CSR ファイルより、サブジェクト DN 、及び RSA 暗号鍵長が正しいことを確認する。
# openssl req -new -key ./private/vpn_key.pem -out vpn_csr.pem -subj "/CN=vpn.vm.lab"
# openssl req -text -in vpn_csr.pem
Certificate Request:
Data:
Version: 1 (0x0)
Subject: CN = vpn.vm.lab
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (4096 bit)
Modulus:
00:b1:f4:ca:41:1e:... (略)
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: sha256WithRSAEncryption
42:36:cb:c2:20:91:... (略)
-----BEGIN CERTIFICATE REQUEST-----
MIIEWjCCAkICAQA... (略)
-----END CERTIFICATE REQUEST-----
署名リクエスト (CSR) をプライベート認証局 (CA) で署名することで、サーバ証明書を発行する。
# openssl ca -create_serial -days 730 -in ./vpn_csr.pem -extfile vpn_ext.txt
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
04:25:bd:31:51:c7:c8:5b:86:0d:d2:e1:92:64:8b:1f:a5:dc:af:ff
Validity
Not Before: Apr 6 17:16:08 2023 GMT
Not After : Apr 5 17:16:08 2025 GMT
Subject:
commonName = vpn.vm.lab
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Key Usage: critical
Digital Signature, Key Encipherment, Key Agreement
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:vpn.vm.lab, IP Address:10.0.0.254
Certificate is to be certified until Apr 5 17:16:08 2025 GMT (730 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:25:bd:31:51:c7:c8:5b:86:0d:d2:e1:92:64:8b:1f:a5:dc:af:ff
Signature Algorithm: sha256WithRSAEncryption
Issuer: O=Private Lab, CN=Private Root CA 01
Validity
Not Before: Apr 6 17:16:08 2023 GMT
Not After : Apr 5 17:16:08 2025 GMT
Subject: CN=vpn.vm.lab
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (4096 bit)
Modulus:
00:b1:f4:ca:41:1e:... (略)
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Key Usage: critical
Digital Signature, Key Encipherment, Key Agreement
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:vpn.vm.lab, IP Address:10.0.0.254
Signature Algorithm: sha256WithRSAEncryption
45:78:80:70:ef:ed:... (略)
-----BEGIN CERTIFICATE-----
MIIFKDCCAxCgAwIBAgIUBCW... (略)
-----END CERTIFICATE-----
Data Base Updated
ルータにインポートするために、プライベート認証局 (CA) の証明書、サーバ証明書、サーバ証明書の秘密鍵をそれぞれ成形して準備する。
【—–BEGIN XXX—–】から【—–END XXX—–】などの囲まれた部分の中の文字列のみを1行に成形する。※コピー&ペーストのための準備
●プライベート認証局 (CA) の証明書
# cat /etc/pki/CA/cacert.pem
-----BEGIN CERTIFICATE-----
MIIFVzCCAz+gAwIBAgIUSpcJwCZLr63cNvarTmy7ZjyNGiAwDQYJKoZIhvcNAQEL
BQAwMzEUMBIGA1UECgwLUHJpdmF0ZSBMYWIxGzAZBgNVBAMMElByaXZhdGUgUm9v
... (略)
llUXDuicIGRSPdqKO8eiA9ULh4mdgiYxAEvJ
-----END CERTIFICATE-----
⇒ MIIFVzCC... (略) ...llUXDuicIGRSPdqKO8eiA9ULh4mdgiYxAEvJ
●サーバ証明書
# cat /etc/pki/CA/newcerts/0425BD3151C7C85B860DD2E192648B1FA5DCAFFF.pem
Certificate:
... (略)
-----BEGIN CERTIFICATE-----
MIIFKDCCAxCgAwIBAgIUBCW9MVHHyFuGDdLhkmSLH6Xcr/8wDQYJKoZIhvcNAQEL
BQAwMzEUMBIGA1UECgwLUHJpdmF0ZSBMYWIxGzAZBgNVBAMMElByaXZhdGUgUm9v
... (略)
SlPuvZ1d2thvqx7JvXjIWcEQurk72eMpPEWRTA==
-----END CERTIFICATE-----
⇒ MIIFKDCCAx... (略) ...SlPuvZ1d2thvqx7JvXjIWcEQurk72eMpPEWRTA==
●サーバ証明書の秘密鍵 (PKCS#8 フォーマット)
# cat /etc/pki/CA/server/private/vpn_key.pem
-----BEGIN PRIVATE KEY-----
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCx9MpBHmiihiY5
55yQbIWlfaC3OtfJyX1wiv/ikBWxcA41Nar3/iCGUrwGvxRuBLdapUxH1+KfrYQ/
... (略)
g1psHIEaOzYLutgjFHXFgJgJqKWRkp0=
-----END PRIVATE KEY-----
⇒ MIIJQwIBADANBg... (略) ...g1psHIEaOzYLutgjFHXFgJgJqKWRkp0=
VyOS (1.4 系) のコンフィグ例
VyOS にプライベート認証局 (CA) の証明書、およびサーバ証明書・秘密鍵をインポートする。
[edit]
# set pki ca private_ca certificate MIIFVzCCAz+gAw... (略)
# set pki certificate server_cert private key MIIJQwIBADANBgkq... (略)
# set pki certificate server_cert certificate MIIFKDCCAxCgAwI... (略)
# run show pki
Certificate Authorities:
Name Subject Issuer CN Issued Expiry Private Key Parent
---------- ----------------------------------- --------------------- ------------------- ------------------- ------------- --------
private_ca CN=Private Root CA 01,O=Private Lab CN=Private Root CA 01 2023-03-21 08:42:03 2043-03-16 08:42:03 No N/A
Certificates:
Name Type Subject CN Issuer CN Issued Expiry Revoked Private Key CA Present
----------- ------ ------------- --------------------- ------------------- ------------------- --------- ------------- ----------------
server_cert Server CN=vpn.vm.lab CN=Private Root CA 01 2023-04-06 17:16:08 2025-04-05 17:16:08 No Yes Yes (private_ca)
Certificate Revocation Lists:
CA Name Updated Revokes
--------- --------- ---------
SSTP の設定を投入する。
[edit]
# edit vpn sstp
[edit vpn sstp]
# set authentication local-users username user-01 password password123
# set authentication protocols mschap-v2
# set client-ip-pool subnet 192.168.0.224/28
# set gateway-address 192.168.0.254
# set ssl ca-certificate private_ca
# set ssl certificate server_cert
# commit
以下、全体の設定表示
interfaces {
ethernet eth0 {
address 10.0.0.254/24
}
ethernet eth1 {
address 192.168.0.254/24
ip {
enable-proxy-arp
}
}
}
nat {
source {
rule 1 {
outbound-interface eth0
source {
address 192.168.0.0/24
}
translation {
address masquerade
}
}
}
}
pki {
ca private_ca {
certificate MIIFVzCCAz+gAwIBA... (略)
}
certificate server_cert {
certificate MIIFKDCCAxCgAwIBA... (略)
private {
key ****************
}
}
}
vpn {
sstp {
authentication {
local-users {
username user-01 {
password password123
}
}
protocols mschap-v2
}
client-ip-pool {
subnet 192.168.0.224/28
}
gateway-address 192.168.0.254
ssl {
ca-certificate private_ca
certificate server_cert
}
}
}
Windows 端末にプライベート認証局 (CA) をインポート
サーバ証明書がプライベート認証局 (CA) で発行された証明書であるため、VPN 接続する際に表示されるサーバ証明書が信頼されず、接続ができない。そのため、これを信頼されたルート証明書として Windows 端末にインポートする。
インポートは保存したファイルの拡張子が【crt, cer】であればダブルクリックから
「Install Certificate > Local Machine > Place all certificates in the following store」で「Trusted Root Certification Authorities」を選択して実施する。(要管理者権限)
●プライベート認証局 (CA) の証明書
# cat /etc/pki/CA/cacert.pem
-----BEGIN CERTIFICATE-----
MIIFVzCCAz+gAwIBAgIUSpcJwCZLr63cNvarTmy7ZjyNGiAwDQYJKoZIhvcNAQEL
BQAwMzEUMBIGA1UECgwLUHJpdmF0ZSBMYWIxGzAZBgNVBAMMElByaXZhdGUgUm9v
... (略)
llUXDuicIGRSPdqKO8eiA9ULh4mdgiYxAEvJ
-----END CERTIFICATE-----
上記のファイルの拡張子を【crt】に変更して Windows 端末に保存し、ダブルクリックでインポートを実施する。
ファイル名: cacert.crt
> certlm
※ Trusted Root Certification Authorities に該当のプライベート認証局 (CA) の証明書がインポートされたことを確認する。
また、DNS の名前解決ができない場合は、必要に応じて【hosts】ファイルを編集する。(要管理者権限)
> Set-Location "C:\WINDOWS\System32\drivers\etc"
> Write-Output "10.0.0.254 vpn.vm.lab" | Add-Content hosts -Encoding Default
> type hosts
Windows 10 の VPN クライアント設定
Windows の設定から以下の VPN 接続を追加する。
接続プロバイダー | Windows (ビルトイン) |
サーバ名またはアドレス | vpn.vm.lab |
VPN の種類 | Secure Socket Tunneling Protocol (SSTP) |
サインイン情報の種類 | ユーザ名とパスワード |
VPN の接続を作成後、ネットワークアダプタが追加されているため、プロパティから設定を変更する。
セキュリティタブ | 認証 | ●次のプロトコルを許可する ☑Microsoft CHAP Version 2 (MS-CHAP v2) |
ネットワークタブ | インターネット プロトコル バージョン 4 | 詳細設定 ☐リモートネットワークでデフォルトゲートウェイを使う ※チェックを外す |
【参考URL】
OpenSSL 3.0のTLS証明書用プライベート鍵生成方法
RSA秘密鍵について
PKI — VyOS 1.4.x (sagitta) documentation