1

我对 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
4

1 回答 1

1

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

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

在此处修改 OpenSaml 示例我认为您可以使用以下方法更改加密参数以使用 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);    
于 2013-06-08T11:39:40.687 回答