如何使用KeyTool使用RSA-OAEP(opensaml)创建CSR

时间:2013-06-06 21:20:49

标签: java certificate rsa keytool opensaml

我对java keytool命令非常熟悉,但我似乎无法弄清楚如何生成OAEP填充的RSA证书。我正在尝试生成一个来保护SAML频道。我觉得我误解了如何指定填充方法。

理想情况下,我最终得到一个使用RSA SHA256签名的通道,使用AES256加密,密钥传输算法具有OAEP填充。

作为一个附带问题,这是否适用于opensaml实现?我不明白为什么不这样做,因为它只是一个有效的X509证书,因为它应该被关注。

keytool -genkey -alias myalias -keyalg RSA -keysize 512 -sigalg SHA256withRSA -keystore sample.jks -dname "CN=C, O=O, L=L, ST=S, C=US" -storepass changeit

1 个答案:

答案 0 :(得分:1)

OAEP填充将适用于您的密文,而不是您的证书。

您的证书应使用keytool参数中的SHA256。但我认为您的SAML DSig参数需要 SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256

修改OpenSaml示例here我认为您可以更改加密参数以使用AES256& RSAOAEP使用:

Assertion assertion = createAssertion(); 

// Assume this contains a recipient's RSA public key
Credential keyEncryptionCredential = getKEKCredential();

EncryptionParameters encParams = new EncryptionParameters();
encParams.setAlgorithm(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES256);

KeyEncryptionParameters kekParams = new KeyEncryptionParameters();
kekParams.setEncryptionCredential(keyEncryptionCredential);
kekParams.setAlgorithm(EncryptionConstants.ALGO_ID_KEYTRANSPORT_RSAOAEP);
KeyInfoGeneratorFactory kigf =
    Configuration.getGlobalSecurityConfiguration()
    .getKeyInfoGeneratorManager().getDefaultManager()
    .getFactory(keyEncryptionCredential);
kekParams.setKeyInfoGenerator(kigf.newInstance());

Encrypter samlEncrypter = new Encrypter(encParams, kekParams);
samlEncrypter.setKeyPlacement(KeyPlacement.PEER);