如果我在某个地方出错,请纠正我,因为我不熟悉加密字段。
我使用以下命令在Java 7中生成EC密钥对:
根据:docs.oracle.com/javase/7/docs/technotes/tools/windows/keytool.html#Commands
keytool -genkeypair -alias MyServerPair -keyalg EC -keysize 571 -sigalg SHA512withECDSA -keypass 123456 -validity 365 -storetype JKS -keystore MyServerStore -storepass 123456
执行后,
在目录中生成密钥库。之后,我尝试使用以下命令导出证书:
keytool -exportcert -alias MyServerPair -file MyServer.crt -storetype JKS -keystore MyServerStore -storepass 123456
之后生成MyServer.crt。
但是,当我打开MyServer.crt文件并检查我发现的证书状态时,"此证书的数字签名无效"
此外,在证书详细信息中,当我看到公钥值时,它显示ECC(0位)。
为什么会这样?我哪里错了?我的猜测是我使用了错误的签名算法。
我指的是docs.oracle.com/javase/7/docs/technotes/gui4des/security/SunProviders.html#SunEC
部分屏幕截图为here
修改
当我使用像571这样的二进制字段值作为-keysize但是如果我使用与二进制字段值相对应的素数值(如521)时,它的工作正常而没有上述问题。
编辑2:
即使存在其他-sigalg值和密钥大小571以及其他二进制值存在问题。
我想只使用素数值。
答案 0 :(得分:2)
您不能在ECC中使用任意密钥大小,但您可以选择进行加密操作的椭圆曲线。 521被映射到NIST P-521曲线,没有键大小571的映射,所以它不起作用。名称keysize在这里是错误的,它最好是ecc的曲线名称。