何とか、SplunkのSSL対応を終えた @snicker_jp です。
きっかけ
以前、セットアップ方法を書いたのですが。その時は出来なかったSSL通信について、設定することが出来たのでその手順です。
前提条件
- Splunk 5.0.2
- Splunk Universal Forwarder 5.0.2 (以降Forwarder)
- OSはどちらもLinux
大まかな流れ
- Splunk(indexer)側で、証明書(RootCA、サーバー証明書)作成、conf反映
- Splunk(indexer)から(Forwarder)側に証明書(RootCA)転送
- Splunk(Forwarder)側で、サーバー証明書作成、conf反映
- 確認
Splunk(indexer)側で、証明書(RootCA、サーバー証明書)作成、conf反映
以下のコマンド実行export SPLUNK_HOME="/opt/splunk"
export OPENSSL_CONF=$SPLUNK_HOME/openssl/openssl.cnf
mkdir -m700 -p $SPLUNK_HOME/etc/certs
chown splunk: $SPLUNK_HOME/etc/certs
$SPLUNK_HOME/bin/splunk cmd genRootCA.sh -d $SPLUNK_HOME/etc/certs -l 2048
$SPLUNK_HOME/bin/splunk createssl server-cert -d $SPLUNK_HOME/etc/certs -c [COMMON_NAME] -n [証明書名] -l 2048 -p
追記:誤りがあったので修正しました。
上記の注意点、
設定しないで、ここでハマりました。
# $SPLUNK_HOME/bin/splunk createssl server-cert -d $SPLUNK_HOME/etc/certs -c [COMMON_NAME] -n splunk01 -l 2048 -p
No Common Name specified. If client side checks are enabled, connection negotiation may fail.
* Create certificate splunk01.pem signed by the root CA.
* Store the splunk01.pem key file locally with your client/server application.
* Enter a secret passphrase when requested.
* The passphrase is used to access splunk01.pem in your application.
* Enter the application's hostname as the Common Name when requested.
* Enter the root CA passphrase (Getting CA Private Key) to sign the keyfile.
* The keyfile will expire after one year or sooner if the root CA expires.
Generating a 2048 bit RSA private key
...........+++
...........................................................+++
writing new private key to 'splunk01key.pem'
Enter PEM pass phrase: #[※必ず設定]
Verifying - Enter PEM pass phrase: #[※必ず設定]
- conf反映(例)
[default]
host = splunk01.example.com
[splunktcp-ssl:9997]
compressed = true
[SSL]
password = [設定したパスワード]
rootCA = $SPLUNK_HOME/etc/certs/cacert.pem
serverCert = $SPLUNK_HOME/etc/certs/splunk01.pem
「password = [設定したパスワード]」は再起動でハッシュ化されるのでベタ書きで大丈夫です。
Splunk(indexer)から(Forwarder)側に証明書(RootCA)転送
以下のファイルを転送します- ca.pem
- cacert.pem
scp ca.pem cacert.pem [ユーザー名]@[Splunk(Forwarder)側]:.
Splunk(Forwarder)側で、サーバー証明書作成、conf反映
同様に、以下のコマンド実行export SPLUNK_HOME="/opt/splunkforwarder"
export OPENSSL_CONF=$SPLUNK_HOME/openssl/openssl.cnf
mkdir -m700 -p $SPLUNK_HOME/etc/certs
mv -v ca.pem cacert.pem $SPLUNK_HOME/etc/certs/.
chown splunk: -R $SPLUNK_HOME/etc/certs
cd $SPLUNK_HOME/etc/certs
$SPLUNK_HOME/bin/splunk createssl server-cert -d $SPLUNK_HOME/etc/certs -c [COMMON_NAME] -n [証明書名] -l 2048 -p
ここでも、
- conf反映(例)
[tcpout]
defaultGroup = splunkssl
[tcpout:splunkssl]
server = 192.168.1.100:9997
compressed = true
[tcpout-server://192.168.1.100:9997]
sslRootCAPath = $SPLUNK_HOME/etc/certs/cacert.pem
sslCertPath = $SPLUNK_HOME/etc/certs/forwarder.pem
sslCommonNameToCheck = splunk01.example.com
sslPassword = [設定したパスワード]
sslVerifyServerCert = true
確認
確認はWebUIから、データが来ていればOKです。または、「$SPLUNK_HOME/var/log/splunk/splunkd.log」を確認
こんな感じの設定でできると思います。
参考サイト
こちらにトラブルシュート例も書かれています。How do I set up SSL forwarding with new, self-signed certificates and authentication? - Splunk Community
http://splunk-base.splunk.com/answers/7164/how-do-i-set-up-ssl-forwarding-with-new-self-signed-certificates-and-authentication
(コラム)参考サイトからの変更点
- genRootCA.shではなく「splunk createssl server-cert」 「genRootCA.sh」だと、こんなメッセージが出るから 「getSignedServerCert.sh」にしてみた
# $SPLUNK_HOME/genRootCA.sh
You must specify where your certificates are to be stored
Usage: getSignedServerCert.sh
-dWhere to store the root CA. /opt/splunk/etc/certs REQUIRED
-lLength of RSA key to generate. OPTIONAL
「getSignedServerCert.sh」にしてみると、こんなメッセージが出て 今後なくなるらしいので「splunk createssl server-cert」にしました
# $SPLUNK_HOME/bin/genSignedServerCert.sh
++python /opt/splunk/bin/genSignedServerCert.py
NOTE: This script is deprecated. Instead, use "splunk createssl server-cert".
Parameters:
-d: Directory where rootCa and other certs are stored.
(required)
-n: The name of the cert.
(required)
-c: The CommonName for the cert. This should match the DNS name.
If DNS is not available then the IP will suffice.
-l: Length of the RSA key to generate (default 1024).
-p: Prompt for optional arguments.
- あとは既定で鍵長が「1024bit」なので、「2048bit」に。
「-p」オプションつけると、「Common Name」聞かれるので「-c」なし
つけても「CN」聞かれるけど、つけないとコマンドが通らない・・・- 「altCommonNameToCheck」エラーが出るので、なし