我最近需要使用容器管理安全和身份验证 项目。我有几个关于如何配置a的问题 凭证处理程序。
MessageDigestCredentialHandler
和SecretKeyCredentialHandler
之间的区别是什么?
SecretKeyCredentialHandler
哪一个更安全?PBKDF2WithHmacSHA1
指定中只有一个算法
documentation #!/bin/bash
# list letter
parseLetter=('a' 'b')
# change path
cd $path/scrapy/scrapyTodo/scrapyTodo
tLen=${#parseLetter[@]}
for (( i=0; i<${tLen}; i++ ));
do
scrapy crawl root -a alpha=${parseLetter[$i]} &
done
。还有什么算法
可用?答案 0 :(得分:9)
回答第一点,这里是切换到Tomcat 8之前和之后我的context.xml中<Realm>
的比较:
<强>之前:强>
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/myDataSource"
roleNameCol="role" userCredCol="password" userNameCol="loginid"
digest="md5"
userRoleTable="userroles" userTable="users"
localDataSource="true" />
<强>后:强>
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/myDataSource"
roleNameCol="role" userCredCol="password" userNameCol="loginid"
userRoleTable="userroles" userTable="users" localDataSource="true">
<CredentialHandler
className="org.apache.catalina.realm.MessageDigestCredentialHandler"
algorithm="md5" />
</Realm>
答案 1 :(得分:2)
NestedCredentialHandler适用于有多种摘要方法的情况,例如您以前使用过MessageDigest但现在要切换更安全的PBKDF2-SHA512配置,并且不想使已配置的密码无效
例如:
<CredentialHandler className="org.apache.catalina.realm.NestedCredentialHandler">
<CredentialHandler className="org.apache.catalina.realm.SecretKeyCredentialHandler"
algorithm="PBKDF2WithHmacSHA512"
iterations="100000"
keyLength="256"
saltLength="16"
/>
<CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler"
algorithm="SHA-256"
iterations="1000"
keyLength="256"
saltLength="8"
/>
</CredentialHandler>
<!-- NOTE: keyLength is in bits, saltLength is in bytes. 16 bytes = 128 bits -->
这将进入您的Realm元素。
SecretKeyCredentialHandler是在Tomcat 8.0.15中引入的,它使用javax.crypto API中的SecretKeyFactory而不是旧方法(MessageDigest)来改变密码。 SecretKeyFactory允许更好的算法,如PBKDF2和HMAC-SHA-512,而不是普通的哈希算法,如SHA-512。之后的旧方法可通过MessageDigestCredentialHandler获得,这相当于直接在Realm元素上设置摘要属性。
请注意,直接设置摘要属性或使用MessageDigestCredentialHandler而不使用可选的迭代属性(仅限8.0.15+)只会进行一次迭代。 这不安全。
至于SecretKeyFactory可用的算法,Java Cryptography Architecture Standard Algorithm Name Documentation for JDK 8是我能找到的最佳参考,但它没有明确列出所有组合。这些是我在我的平台上发现的(Linux 3.13.0,Oracle JDK 1.8.0_111),但你的可能支持其他组合。
答案 2 :(得分:0)
我需要将相同的myapp.war二进制文件部署到Tomcat7和Tomcat8环境。使用此配置,两个环境都可以正常工作。
<强> MyApp的/ META-INF / context.xml中强>
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/myapp" localDataSource="true" digest="SHA-256"
userTable="user_role_v" userNameCol="username" userCredCol="password"
userRoleTable="user_role_v" roleNameCol="role">
<CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler"
algorithm="SHA-256" iterations="1" saltLength="0" encoding="ISO-8859-1" />
</Realm>
您在启动时在catalina日志文件中看到未知参数的警告但无关紧要。