部署Corda节点启动报错:Unrecognised algorithm: 1.2.840.10040.4.1
从你提供的日志来看,这个错误的核心是Corda节点无法识别1.2.840.10040.4.1这个算法OID——它对应的是DSA(数字签名算法),而Corda 2.0.0默认不支持用DSA密钥对来配置节点,节点要求使用RSA或椭圆曲线(EC)算法生成的密钥。
下面是一步步的解决步骤:
1. 验证当前密钥库的算法
首先确认你的节点密钥库(通常是node.jks或sslkeystore.jks)里的密钥是不是用DSA生成的:
打开命令提示符,执行以下keytool命令(替换为你的密钥库路径):
keytool -list -v -keystore C:\Corda\node.jks
输入密钥库密码后,查看输出里的Signature algorithm name字段,如果显示类似SHA1withDSA,那就是问题的根源。
2. 重新生成合规的密钥库
用RSA或EC算法重新生成密钥库,推荐使用EC(性能更优):
生成RSA密钥库示例
keytool -genkeypair -alias corda -keyalg RSA -keysize 2048 -validity 3650 -keystore C:\Corda\node.jks
生成EC密钥库示例
keytool -genkeypair -alias corda -keyalg EC -keysize 256 -validity 3650 -keystore C:\Corda\node.jks
执行命令时按照提示填写密钥库密码、节点DN信息(要和你node.conf里的配置一致)。
3. 更新节点配置
修改node.conf文件,确保密钥库路径、密码、别名都和新生成的密钥库匹配,比如:
keyStorePassword: "your-keystore-password" trustStorePassword: "your-truststore-password" keyStore: "node.jks"
4. 重新部署节点服务
如果是用Gradle的deployNodes任务生成的节点,需要在构建脚本里指定密钥算法,避免再次生成DSA密钥:
在build.gradle的deployNodes任务中添加算法配置:
deployNodes { node { name "O=YourParty,L=YourCity,C=YourCountry" keyAlgorithm "RSA" // 或者"EC" keySize 2048 // EC的话填256 } }
重新执行deployNodes任务生成节点,再重新安装Windows服务。
5. 验证修复效果
启动Corda服务后,查看C:\Corda\logs\server.log,如果没有再出现Unrecognised algorithm的错误,说明问题已经解决。
额外注意
Corda 2.0.0是比较老旧的版本,虽然支持RSA和EC,但尽量遵循官方推荐的密钥算法规范,避免使用DSA这类安全性和性能都不如现代算法的选项。
内容的提问来源于stack exchange,提问作者Dicky Chan

