Может помочь следующее, если gRPC позволяет вам получить доступ к SSLEngine:
Я сделал макет, используя SSLEngineSimpleDemo (который является частью Oracle jssesamples.zip ) для установки пользовательскихAlgorithmConstraints, где он создает SSLEngine:
private void createSSLEngines() throws Exception {
...
serverEngine = sslc.createSSLEngine();
...
// Set custom AlgorithmConstraints on the SSL engine
SSLParameters sslParams = sslc.getSupportedSSLParameters();
sslParams.setAlgorithmConstraints( new MyAlgorithmConstraints() );
serverEngine.setSSLParameters(sslParams);
Класс MyAlgorithmConstraints выглядит примерно так:
import java.security.AlgorithmConstraints;
import java.security.AlgorithmParameters;
import java.security.CryptoPrimitive;
import java.security.Key;
import java.security.interfaces.RSAKey;
import java.util.Set;
public class MyAlgorithmConstraints implements AlgorithmConstraints {
@Override
public boolean permits(Set<CryptoPrimitive> primitives, String algorithm, AlgorithmParameters parameters) {
return true;
}
@Override
public boolean permits(Set<CryptoPrimitive> primitives, Key key) {
boolean permitted = permittedRSAKey(primitives, key);
return permitted;
}
@Override
public boolean permits(Set<CryptoPrimitive> primitives, String algorithm, Key key, AlgorithmParameters parameters) {
boolean permitted = permittedRSAKey(primitives, key);
return permitted;
}
private boolean permittedRSAKey(Set<CryptoPrimitive> primitives, Key key) {
boolean permitted = true;
if (primitives.contains(CryptoPrimitive.KEY_AGREEMENT) && key instanceof RSAKey) {
int length = ((RSAKey)key).getModulus().bitLength();
if (length < 2040) {
permitted = false;
System.out.println("+*+*+* MyConstraints: short RSA key not allowed ["+length+"]");
}
}
return permitted;
}
}
Длина 2040, выбранная в случае начальных нулей на ключе согласно предупреждению в Как получить размер ключа RSA в Java , но вы также можете изменить условие на length > 1024 permitted=true
.