Tomcat Vault的使用方法

在tomcat的配置文件中,用户名和密码是明文保存的:

从上图中可以看到,tomcat的配置文件中的password是明文保存的:


Tomcat Vault的使用方法_第1张图片


<user username="tomcat" password="tomcat" roles="tomcat"/>



为了解决这个问题,JBoss社区推出了tomcat-vault[1],通过Java的KeyStore机制来保存秘钥,并通过秘钥对Tomcat配置文件中明文的密码进行加密。本文简单介绍tomcat-vault的使用方法。

下载tomcat-vault

首先从tomcat-vault的网站下载最新版本:https://github.com/picketbox/tomcat-vault/releases

我在写这篇文章的时候,最新版本是1.0.8。下载完成后将压缩包解压:

cute:Downloads weli$ unzip tomcat-vault-1.0.8.Final.zip
Archive:  tomcat-vault-1.0.8.Final.zip
5d8b74bb5e8e8fe636194bb6ab4633db9e09ba7a
   creating: tomcat-vault-1.0.8.Final/
  inflating: tomcat-vault-1.0.8.Final/INSTALL
  inflating: tomcat-vault-1.0.8.Final/LICENSE
  inflating: tomcat-vault-1.0.8.Final/README.md
...


然后使用maven将项目编译:

cute:tomcat-vault-1.0.8.Final weli$ mvn install
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Tomcat Vault extension 1.0.8.Final
[INFO] ------------------------------------------------------------------------
Downloading: http://maven.repository.redhat.com/earlyaccess/all/org/apache/tomcat/tomcat-util/8.0.15/tomcat-util-8.0.15.pom
Downloading: http://maven.repository.redhat.com/techpreview/all/org/apache/tomcat/tomcat-util/8.0.15/tomcat-util-8.0.15.pom
Downloading: https://repository.jboss.org/nexus/content/repositories/releases/org/apache/tomcat/tomcat-util/8.0.15/tomcat-util-8.0.15.pom
...
[INFO] Installing /Users/weli/Downloads/tomcat-vault-1.0.8.Final/target/vault-tomcat-1.0.8.Final-jar-with-dependencies.jar to /Users/weli/.m2/repository/org/apache/tomcat/vault-tomcat/1.0.8.Final/vault-tomcat-1.0.8.Final-jar-with-dependencies.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:16 min
[INFO] Finished at: 2015-10-24T11:33:30+08:00
[INFO] Final Memory: 22M/198M
[INFO] ------------------------------------------------------------------------


编译完成后,可以看到项目中多了一个modules目录:


Tomcat Vault的使用方法_第2张图片


这个目录是为了匹配bin目录中的vault.sh的:





我们现在可以运行一下vault.sh玩玩看:


Tomcat Vault的使用方法_第3张图片


如上图所示,如果编译成功,vault.sh就可以正确运行了。我们之后会用到vault.sh,先按CTRL-C退出程序,然后看一下target目录中的内容:


Tomcat Vault的使用方法_第4张图片

如上图所示,可以看到target目录中有vault-tomcat-1.0.8.Final-jar-with-dependencies.jar,我们之后要用到这个jar,把它copy到tomcat的lib目录中。在此之前,我们先下载tomcat。

下载tomcat

我们等下要把vault-tomcat-1.0.8.Final-jar-with-dependencies.jar放进tomcat的目录。接下来我们要下载tomcat[2],我下载的时候最新版本是tomcat 8.0.28。下载完成后将其解压:





试着启动一下tomcat看看:


Tomcat Vault的使用方法_第5张图片


Tomcat Vault的使用方法_第6张图片


没什么问题的话,关掉tomcat:


Tomcat Vault的使用方法_第7张图片


接下来是把编译好的,包含了所有依赖库的tomcat-vault拷贝到tomcat:





然后就是配置tomcat-vault的阶段了。

配置tomcat-vault

tomcat-vault使用java提供的keystore来管理秘钥,所以需要用keystore来生成一个keystore,并往里面加入一个加解密用的秘钥。为了方便管理,我把keystore保存在tomcat的conf目录当中,因此在conf目录中生成keystore:


Tomcat Vault的使用方法_第8张图片


从上图中可以看到,我们在tomcat的conf目录中用JDK提供的keytool命令生成了keystore,文件名为vault.keystore。在这个keystore当中,我们保存了一个磨人的秘钥,名为my_vault。可以用keytool命令来查看:


Tomcat Vault的使用方法_第9张图片


从上面的图中可以看到,在keystore中保存了一个名为my_vault的秘钥,它的类型是SecrectKeyEntry,是一个对称加密的秘钥。稍后我们会配置tomcat-vault使用这个秘钥来对tomcat配置文件中的用户密码进行加解密。

接下来我们要做的是使用tomcat-vault.sh生成配置文件,全过程如下:


Tomcat Vault的使用方法_第10张图片


上图所示的是一个tomcat-vault.sh的完整运行过程,这里面的配置说明如下:

Enter directory to store encrypted files:/Users/weli/projs/apache-tomcat-8.0.28/conf


这行配置保存tomcat的密码的加密文件的位置,我给配置到了tomcat的conf目录中。

Enter Keystore URL:/Users/weli/projs/apache-tomcat-8.0.28/conf/vault.keystore



这行是指定keystore的所在地,我们之前把vault.keystore生成在tomcat的conf目录中,因此指定相应路径即可。

Enter Keystore password: my_password123
Enter Keystore password again: my_password123


这两行是输入keystore的密码,我们之前用keytool生成时,使用的是my_password123。因为tomcat需要这个密码来访问keystore中的秘钥,所以需要知道这个密码。

Enter 8 character salt:1234abcd
Enter iteration count as a number (Eg: 44):120


这两行配置用于加密上面keystore的密码,因为我们不能在tomcat的配置文件中使用明文保存keystore的密码,否则就毫无意义了。

Enter Keystore Alias:my_vault


这行配置是告诉tomcat在keystore中可以使用的秘钥名称。通过以上内容,tomcat-vault.sh最后帮我们生成了给tomcat使用的配置文件内容:

KEYSTORE_URL=/Users/weli/projs/apache-tomcat-8.0.28/conf/vault.keystore
KEYSTORE_PASSWORD=MASK-3CuP21KMHn7G6iH/A3YpM/
KEYSTORE_ALIAS=my_vault
SALT=1234abcd
ITERATION_COUNT=120
ENC_FILE_DIR=/Users/weli/projs/apache-tomcat-8.0.28/conf/



把上面的配置保存在tomcat的conf目录中,把文件名命名为vault.properties:


Tomcat Vault的使用方法_第11张图片


接下来我们还要在conf目录中的catalina.properties这个配置文件中添加一行:

org.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.vault.util.PropertySourceVault



Tomcat Vault的使用方法_第12张图片


这样,tomcat这边的配置工作就算完成了。我们接下来用tomcat-vault.sh来生成一个密码:


Tomcat Vault的使用方法_第13张图片


从上图中使用的命令里面,我们可以看到我们要加密的密码是P@SSW0#D,把它命名为manager_password:

--attribute manager_password --sec-attr P@SSW0#D



从输出的结果中我们可以看到vault使用keystore中的秘钥对密码进行了加密病保存在了配置的目录当中:

KEYSTORE_URL=/Users/weli/projs/apache-tomcat-8.0.28/conf/vault.keystore
KEYSTORE_PASSWORD=MASK-3CuP21KMHn7G6iH/A3YpM/
KEYSTORE_ALIAS=my_vault
SALT=1234abcd
ITERATION_COUNT=120
ENC_FILE_DIR=/Users/weli/projs/apache-tomcat-8.0.28/conf/


我们查看tomcat的目录可以看到加密文件:


Tomcat Vault的使用方法_第14张图片


接下来是在tomcat的配置文件中使用manager_password这个密码:


Tomcat Vault的使用方法_第15张图片


可以从上图中看到,在tomcat-users.xml中,我们没有使用明文的密码P@SSW0#D,而是引用加密后的:

${VAULT::my_block::manager_password::}



为了测试配置是否工作,我们启动tomcat:





接下来访问tomcat的管理端:


Tomcat Vault的使用方法_第16张图片


根据tomcat-users.xml中的配置,我们输入用户名为manager,密码为P@SSW0#D


Tomcat Vault的使用方法_第17张图片


如果tomcat-vault正常工作,那么会接受这个密码,用keystore中的秘钥解密tomcat-users.xml中的${VAULT::my_block::manager_password::},并且比对成功。从结果上来看,就是成功登录了管理端:


Tomcat Vault的使用方法_第18张图片


小结

本文简单介绍了tomcat-vault的使用方法。tomcat-vault通过JCE标准的keytool来生成keystore,并使用keystore来保存对称加解密秘钥,再通过秘钥来加解密tomcat配置中不想用明文保存的数据。

[1] https://github.com/picketbox/tomcat-vault
[2] https://tomcat.apache.org/download-80.cgi

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐
  • —软件人才免语言低担保 赴美带薪读研!—



你可能感兴趣的:(tomcat,方法,vault)