密码哈希加密
本章是关于Camunda平台中如何进行密码哈希的。特别是,正在使用的哈希算法和盐的生成。如果你不熟悉这些主题,我们建议阅读有关加密哈希函数百科、 盐 和安全密码哈希 的相关文章。
Camunda 7.6版和更早的版本使用加密哈希函数 SHA-1。 从Camunda 7.7版本开始,开始使用哈希函数 SHA-512。 如果需要另一个自定义哈希函数,可以在Camunda中插入一个自定义密码哈希算法 。
在盐的生成过程中,每个用户都会生成16字节的随机值,它是用SecureRandom生成的。 如果需要,也可以自定义盐的生成。
自定义哈希算法
如果有必要使用更安全的哈希算法,你可以提供你自己的实现。
你可以通过实现org.camunda.bpm.engine.impl.digest
包中的PasswordEncryptor
接口来做到这一点。该接口确保所有密码哈希的必要功能都能实现。你可以看看org.camunda.bpm.engine.impl.digest
包中的Base64EncodedHashDigest
和ShaHashDigest
类,看看Camunda中是如何实现的。你自己实现的模板可以是这样的:
public class MyPasswordEncryptor implements PasswordEncryptor {
@Override
public String encrypt(String password) {
// do something
}
@Override
public boolean check(String password, String encrypted) {
// do something
}
@Override
public String hashAlgorithmName() {
// This name is used to resolve the algorithm used for the encryption of a password.
return "NAME_OF_THE_ALGORITHM";
}
}
一旦完成,你可以使用流程引擎配置,通过设置passwordEncryptor
属性到你的自定义实现,例如MyPasswordEncryptor
,来插入自定义实现。请参阅Process Engine Bootstrapping,了解你必须为你的Camunda环境设置该属性的地方。
请注意,即使你已经创建了用其他算法加密的用户,例如,旧的自定义算法或Camunda默认的哈希算法SHA-512
,他们仍然可以被引擎自动解决,尽管你后来添加了你的自定义算法。属性customPasswordChecker
是一个用于检查(旧)密码的哈希算法的列表。Camunda默认的哈希算法是自动添加的,所以请只在该列表中添加你之前自定义的passwordEncryptor
实现。
注意!
请不要使用你自己的哈希函数的实现,而应使用经过同行评审的标准!
自定义盐的生成
与哈希算法类似,盐的生成也可以进行调整。首先,实现org.camunda.bpm.engine.impl.digest
中的SaltGenerator
接口。这可以确保所有必要的功能都被实现。你可以看看org.camunda.bpm.engine.impl.digest
包中的Base64EncodedSaltGenerator
和Default16ByteSaltGenerator
类,看看Camunda中是如何实现的。你自己实现的模板可以是这样的:
public class MyCustomSaltGenerator implements SaltGenerator {
@Override
public String generateSalt() {
// do something
}
}
一旦完成,你可以使用流程引擎配置,通过设置 “saltGenerator “属性来插入自定义的实现,例如 “MyCustomSaltGenerator”。请参阅Process Engine Bootstrapping,了解你必须为你的Camunda环境设置该属性的地方。