PR

【BIG-IP】管理GUIの証明書をwindows環境のopensslで構築した認証局で署名してみた

当サイトではアフィリエイト広告を利用しています。

BIG-IP
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。

BIG-IPの管理GUI画面でいつも出てくる、「安全な接続ではありません」がなんかカッコ悪いので出ないようにしたいと思ったのでやってみました。BIG-IPのバージョンは17系。

linux環境を用意するのが面倒だったためwindowsにopensslをインストールして認証局(CA)を作成。※windowsでopensslをセットアップするのは下記のサイトを参考にしました。

OpenSSL で認証局 (CA) を構築する手順 (Windows)
Node.js, Express, Firebase, mongoDB 等、ソフトウェア開発に欠かせないバックエンドシステムの利用方法について説明します。

そして作成した認証局(CA)でBIG-IPのデバイスCSRを署名し、作成したデバイス証明書をインポートする手順をまとめました。

OpenSSLのインストール

Binaries
TLS/SSL and crypto library. Contribute to openssl/openssl development by creating an account on GitHub.

64bit Windows 版のパッケージを C:\OpenSSL-Win64 にインストールして、システム環境変数 PATH に C:\OpenSSL-Win64\bin を追加

> openssl version

バージョンが表示されればインストールとパス通しは完了です。

ディレクトリの作成

ここでは C:\CA というフォルダ以下に環境を構築するものとします。 もし他のパスにしたい場合は、パスを読み替えてください。

C:\CA 内に、次の内容を setup.bat という名前で作成してください。

@mkdir root\certs
@mkdir root\crl
@mkdir root\newcerts
@mkdir root\private
@mkdir root\csr
@type nul > root\index.txt
@type nul > root\crlnumber
@echo 1000 > root\serial
@mkdir intermediate\certs
@mkdir intermediate\crl
@mkdir intermediate\newcerts
@mkdir intermediate\private
@mkdir intermediate\csr
@type nul > intermediate\index.txt
@type nul > intermediate\crlnumber
@echo 1000 > intermediate\serial

コマンドプロンプトを開き C:\CA に移動して、setup.bat を実行してください。

> cd /d C:\CA
> setup.bat

ルートCAの設定ファイル作成

C:\CA\root 内に以下の内容を openssl.cfg という名前で作成してください。

[ ca ]
default_ca    = CA_default
[ CA_default ]
dir              = C:\\CA\\root
certs            = C:\\CA\\root\\certs
crl_dir          = C:\\CA\\root\\crl
database         = C:\\CA\\root\\index.txt
new_certs_dir    = C:\\CA\\root\\newcerts
serial           = C:\\CA\\root\\serial
crlnumber        = C:\\CA\\root\\crlnumber
crl              = C:\\CA\\root\\crl.pem
certificate      = C:\\CA\\root\\certs\\ca.cert.pem
private_key      = C:\\CA\\root\\private\\ca.key.pem
name_opt         = ca_default
cert_opt         = ca_default
crl_extensions   = crl_ext
default_days     = 365
default_crl_days = 30
default_md       = sha256
preserve         = no
policy           = policy_match
[ policy_match ]
countryName             = match
stateOrProvinceName     = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional
[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional
[ req ]
default_bits            = 2048
distinguished_name      = req_distinguished_name
x509_extensions         = v3_ca
string_mask             = utf8only
default_md              = sha256
[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = US
countryName_min                 = 2
countryName_max                 = 2
stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = California
localityName                    = Locality Name (eg, city)
localityName_default            = Los Angeles
0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = Ace Internet Inc.
organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = http://ace.example.com/
commonName                      = Common Name (e.g. server FQDN or YOUR name)
commonName_default              = Ace Internet Root CA
commonName_max                  = 64
emailAddress                    = Email Address
emailAddress_default            = ace@example.com
emailAddress_max                = 64
[ server_cert ]
basicConstraints       = CA:FALSE
nsCertType             = server
nsComment              = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage               = critical, digitalSignature, keyEncipherment
extendedKeyUsage       = serverAuth
[ v3_ca ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints       = critical,CA:true
keyUsage               = critical, digitalSignature, cRLSign, keyCertSign
[ v3_intermediate_ca ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints       = critical,CA:true, pathlen:0
keyUsage               = critical, digitalSignature, cRLSign, keyCertSign
[ crl_ext ]
authorityKeyIdentifier = keyid:always

秘密鍵とルートCA証明書の作成

C:\CA\root に移動したままCAの秘密鍵と証明書を作成します

CA秘密鍵作成

openssl genrsa -out root/private/ca_key.pem  2048

CA証明書の作成

openssl req -x509 -key root/private/ca_key.pem -out ca_cert.pem -days 3650
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo-to
Locality Name (eg, city) []:Minato-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Some Test Company
Organizational Unit Name (eg, section) []:Web Service Dept.
Common Name (e.g. server FQDN or YOUR name) []:127.0.0.1:3000
Email Address []:(入力せずEnter)

PCにCAルート証明書をインストール

作成されたca_cert.pemをコピーしてca.cerにリネームする
ca.cerをダブルクリック
証明書のインストール
現在のユーザ
証明書をすべて次のストアに配置する
参照
信頼されたルート証明書期間
完了

BIG-IPでCSRを発行する

Subject Alternative Nameには必ずアクセスする際に使うURLを入れましょう。マネジメントGUIにアクセスする人は大体IPでアクセスすると思うので、IP:「マネジメントポートのIP」を入れるようにしましょう。ここがないと「安全な接続ではありません」は消えません。

ダウンロードしたserver.csrはc:\ca/rootに移動しておく

ルートCAにSubject Alternative Nameの設定ファイルを作成

C:\CA/rootにsubjectAltNameを作成し以下の内容を書く。IPはマネジメントポートのIPに変えてください。※subjectAltNameは拡張子なしでも.txtでも問題ありません。今回は拡張子なしファイルでやりました

subjectAltName=DNS:accountA-server,IP:192.168.52.66

BIG-IPのCSRをルートCAの秘密鍵で署名してサーバ証明書を作成する

いよいよ署名です。(長かった。。。)

openssl ca -config root/openssl.cfg -in root/server.csr -keyfile root/private/ca_key.pem  -cert root/private/ca_cert.pem -out root/webserver.cert -extfile root/subjectAltName

証明書をBIG-IPにアップロードする

動作確認

https://「マネジメントポートIP」でアクセスして「安全の接続ではありません」の警告が出なければ成功です。

コメント

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