В зависимости от вашего проекта и ограничений вы можете использовать java org.bouncycaslte для операций по подписанию кода.
Существует очень полезный PDF-файл для bouncycastle: https://www.bouncycastle.org/fips-java/BCFipsIn100.pdf
В зависимости ото том, как вы подписываете исполняемые файлы, ContentSigner.java
предоставляет API-интерфейс для подписи с секретным ключом
public class ContentSignerFactory {
public static ContentSigner getContentSigner(Function<ByteArrayOutputStream, byte[]> lambda, String algorithm) {
return new ContentSigner() {
//This is to ensure that signature is created using the right data.
ByteArrayOutputStream stream = new ByteArrayOutputStream();
@Override
public byte[] getSignature() {
//Calling HSM here instead, the stream is the AttributeMap
byte[] data = lambda.apply(stream);
return data;
}
//Perhaps called by BouncyCastle library to provide the content
@Override
public OutputStream getOutputStream() {
return stream;
}
@Override
public AlgorithmIdentifier getAlgorithmIdentifier() {
return new DefaultSignatureAlgorithmIdentifierFinder().find(algorithm);
}
};
}
}
. Кроме того, AWS HSM стоит 28000 долларов в год, поскольку им требуются кластерные HSM, чтобы разрешить пользовательское хранилище KMS