Я недавно начал изучать "Дозор" и теперь столкнулся с определенной проблемой, и не смог найти решение в документах или в Интернете.
Случай: Я хочу иметь два набора пар ключей Public / Private.Один из них будет активен, а другой будет отключен.
То, что я сделал, - это сгенерировал KeyHandle , подобный этому, и сохранил его в AWS KMS :
KeysetHandle pri = KeysetHandle.generateNew(SignatureKeyTemplates.ECDSA_P256);
KeysetHandle pub = privateKeySetHandle.getPublicKeysetHandle();
pri.write(JsonKeysetWriter.withFile(new File("pri_p")),
new AwsKmsClient().withDefaultCredentials().getAead(keyStoreUrl));
pub.write(JsonKeysetWriter.withFile(new File("pub_p")),
new AwsKmsClient().withDefaultCredentials().getAead("someUrl"));
//*************** Same code for secondary **************
KeysetHandle pri = KeysetHandle.generateNew(SignatureKeyTemplates.ECDSA_P256);
KeysetHandle pub = privateKeySetHandle.getPublicKeysetHandle();
pri.write(JsonKeysetWriter.withFile(new File("pri_s")),
new AwsKmsClient().withDefaultCredentials().getAead(keyStoreUrl));
pub.write(JsonKeysetWriter.withFile(new File("pub_s")),
new AwsKmsClient().withDefaultCredentials().getAead("someUrl"));
Я сделал это, потому что думал, что сгенерирую две пары и сохраню их в разных файлах json:
- 'pri-p' (основной)
- 'pub-p' (основной)
- 'pri-s' (дополнительный)
- 'pub-s' (вторичный)
После этого я написал API, который возвращал оба открытых ключа (первичного и вторичного) клиенту, и ответ был:
({
"primaryKeyId": 12345,
"key": [{
"keyData": {
"typeUrl": "type.googleapis.com/google.crypto.tink.EcdsaPrivateKey",
"keyMaterialType": "ASYMMETRIC_PUBLIC",
"value": "IDJNVUs,csaIQDP9jhF+MERyoZ6Ede/LteBYS0n4zVbYTcuCZCiFBERhyIhAJettefH3BPjFyyZC3m90Pw+m/K8sjiEPS"
},
"outputPrefixType": "TINK",
"keyId": 12345,
"status": "ENABLED"
}]
},{
"primaryKeyId": 6789,
"key": [{
"keyData": {
"typeUrl": "type.googleapis.com/google.crypto.tink.EcdsaPublicKey",
"keyMaterialType": "ASYMMETRIC_PUBLIC",
"value": "EgYI7hfsdhfsdm0eeii3m43434334390439TcuCZCiFBERhyIhAJettefH3BPjFyyZC3m90Pw+m/K8sjiEPSXKSMgmWEgr"
},
"outputPrefixType": "TINK",
"keyId": 6789,
"status": "ENABLED"
}]
})
Теперь я хотел сделать вторичный как неактивный, чтобы никто не использовал его, то есть статус: ОТКЛЮЧЕН * , используя следующий код:
KeysetHandle secondaryPublicKey = KeysetManager
.withKeysetHandle(secondaryPublicKey)
.disable(keySetHandle.getKeysetInfo().getPrimaryKeyId())
.getKeysetHandle();
но я получил исключение как:
java.security.generalsecurityexception: cannot disable the primary key
В то время я понял, что то, что я сделал, было неправильно, и мне пришлось сделать это снова, так что оба Ключи находятся втот же KeysetHandle иэто я не могу сделать, как при создании KeysetHandle, например:
KeysetHandle pri = KeysetHandle.generateNew(SignatureKeyTemplates.ECDSA_P256);
Он уже помечен как первичный ключ, и если я получу открытый ключ из этого, это также будет первичный ключ.Независимо от того, сколько ключей я сгенерирую, все будут помечены как основные, используя это.
Есть еще один способ:
- Создать несколько Ключ
- Добавить Набор ключей
- Отметитьодин из них в качестве основного
- Create KeysetHandle
- Запись в AWS Kms
Но я не уверен, как это сделать, илиявляется ли это правильный путь.
Нужна помощь в этом, я бы очень признателен.