このブログを検索

2022/02/12

openvpn@centos8 第3回 証明書, iPhone, Mac

サーバがcentos8, クライアントがWindows10で、static keyで接続できた。

その時のクライアント側configをiPhoneにメールで転送してopenvpnアプリに追加して接続しようとすると、 CA not defined というエラーになって接続できない。

このあたりはOSの種類やバージョンによって変わってくることは、違うvpnを設定した時にもあったことだ。 apple製品はこの辺がwindowsより厳しくなっている。

まあ最初から証明書は作るつもりだったので。

証明書はopensslでやる。

サーバの秘密鍵を作る→csr作成→caで署名

ここは何度もやったので省略

opensslの設定はほぼデフォルト

configはサンプルをコピーして作る。configの置き場は /etc/openvpn/server/

# cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/

なるべくデフォルト設定を使う。

以下のファイルが必要

ca ca.crt #VPNサーバの証明書を発行(署名)するCAの証明書
cert server.crt #VPNサーバの証明書
key server.key #VPNサーバの秘密鍵

#   openssl dhparam -out dh2048.pem 2048
dh dh2048.pem # DHパラメータ

#   openvpn --genkey --secret ta.key
#
# The server and each client must have
# a copy of this key.
# The second parameter should be '0'
# on the server and '1' on the clients.
tls-auth ta.key 0 # This file is secret # tlsキー、後ろの数字は0がサーバー、1がクライアント

dhパラメータをeasyrsaで作るように説明している情報が多いがsampleコンフィグにopensslのコマンドが書いてあるのでそれを使う。

ごちゃごちゃやったが結局つながったので、configを載せておく。 サーバ証明書とクライアント証明書での接続

サーバ(コメント部分削除)
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.55.0 255.255.255.0"
keepalive 10 120
tls-auth ta.key 0
persist-key
persist-tun
status openvpn-status.log
log-append  openvpn.log
verb 4
explicit-exit-notify 1

外部ファイル(server.confと同じフォルダ /etc/openvpn/server に置く) ca.crt
server.crt
server.key
dh2048.pem

pushは接続先のプライベートネットワークセグメント(アクセス先)
加えてサーバ側のfirewalld設定やip forwardingの設定が必要(前回の記事を参照)
ログ出力設定はデフォルトで無効だが有効にした

クライアント(windows) ※タグが表示されるように<>の前後にスペースを入れてある
client
remote vpn.example.com
port 1194
proto udp
dev tun
tls-auth ta.key 1
persist-tun
persist-key
verb 4
mute 10

< ca >
-----BEGIN CERTIFICATE-----
(省略、サーバ証明書にサインしたCAの証明書)
-----END CERTIFICATE-----
< /ca >
< cert >
-----BEGIN CERTIFICATE-----
(省略、クライアント証明書)
-----END CERTIFICATE-----
< /cert >
< key >
-----BEGIN RSA PRIVATE KEY-----
(省略、クライアントの秘密鍵)
-----END RSA PRIVATE KEY-----
< /key >

外部ファイル
ta.key

client が必要

クライアント(iPhone 15.2.1, Mac Monterey Version12.2)
client
remote www.monqy.net
port 1194
proto udp
dev tun
persist-tun
persist-key
verb 4
mute 10
key-direction 1
< ca >
-----BEGIN CERTIFICATE-----
(省略、サーバ証明書にサインしたCAの証明書)
-----END CERTIFICATE-----
< /ca >
< cert >
-----BEGIN CERTIFICATE-----
(省略、クライアント証明書)
-----END CERTIFICATE-----
< /cert >
< key >
-----BEGIN RSA PRIVATE KEY-----
(省略、クライアントの秘密鍵)
-----END RSA PRIVATE KEY-----
< /key >
< tls-auth >
-----BEGIN OpenVPN Static key V1-----
(省略、ta.keyの中身)
-----END OpenVPN Static key V1-----
< /tls-auth >
ポイントは、 tls-auth ta.key 1 と書くところは ta.keyの内容を< tls-auth >に貼り付けて、
key-direction 1 (client側を意味する) を書く。