當我們要把Nifi設置成加密模式時冲杀,我們需要為其提供keystore和truststore效床。如果我們想通過TLS身份驗證訪問Nifi的UI時,我們還需要生成一個客戶端的PKCS12文件來導入瀏覽器中权谁。以下簡單介紹怎么用Java自帶的keytool來生成以上所提及的文件剩檀。
生成Keystore
以下命令生成一個包含自簽證書(self-signed certificate)的Java keystore:
keytool -genkey -keyalg RSA -alias nifi -keystore keystore.jks -keypass [password] -storepass [password] -validity 365 -keysize 4096 -dname "CN=[hostname], OU=nifi"
其中,替換[password]
為你想設置的密碼旺芽,替換[hostname]
為你運行Nifi的機器的hostname沪猴。
這樣辐啄,我們就生成了keystore.jks
文件。該文件需要放置到Nifi當中运嗜。
生成PKCS12文件以及對應的Truststore
PKCS12
文件是一種加密文件壶辜,一般用于存放證書以及對應的私鑰。由于使用keytool無法直接生成PKCS12
文件洗出,我們首先生成一個包含自簽證書的keystore(與上文生成Keystore的命令很相似):
keytool -genkey -keyalg RSA -alias client -keystore client_keystore.jks -keypass password -storepass password -validity 365 -keysize 4096 -dname "CN=user, OU=nifi"
這里士复,我們只是隨便設置了一個密碼password
,因為這個Keystore只是一個過渡的產(chǎn)物翩活,我們最后不會用到阱洪,所以隨便設置一個就好。
接著我們把這個keystore轉(zhuǎn)化成PKCS12文件:
keytool -importkeystore -srckeystore client_keystore.jks -destkeystore client.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass password -deststorepass [client_password] -destkeypass [client_password] -srcalias client -destalias client
其中菠镇,替換[client_password]
為你想為PKCS12文件設置的密碼冗荸。
除了生成PKCS12文件外,我們還需要生成一個信任PKCS12密匙文件中的證書的truststore利耍。為此蚌本,我們先從之前的keystore中輸出密匙的證書:
keytool -export -keystore client_keystore.jks -alias client -file client.der -storepass password
當我們得到證書以后,我們把這個證書引入到truststore.jks
當中:
keytool -import -file client.der -alias client -keystore truststore.jks -storepass [truststore_password] -noprompt
其中隘梨,替換[truststore_password]
為你想為truststore設置的密碼程癌。
這樣,我們就生成了一個要放到Nifi當中的truststore.jks
文件轴猎,以及需要導入到瀏覽器中的client.p12
文件嵌莉。
最后,為了安全起見捻脖,你應該刪除掉client_keystore.jks
以及client.der
兩個文件锐峭。
導入PKCS12文件
想要通過TLS身份驗證方式訪問Nifi UI,你必須先把生成的PKCS12文件導入到瀏覽器中可婶。以Chrome為例沿癞,先進入設置
=> 高級
,找到 證書管理
一項:
點開該欄矛渴,會彈出以下窗口:
點擊導入椎扬,按照向?qū)е敢x擇你的client.p12
文件具温,并輸入該文件的密碼就可以完成導入盗舰。然后你就可以通過瀏覽器訪問加密的Nifi界面了。當被要求選擇證書時桂躏,選擇你添加的那項就可以了(如下圖):