it-swarm.com.de

InvalidKeyException: Illegal Key Size - Java-Code löst Ausnahme für Verschlüsselungsklasse aus - wie beheben?

Ich habe versucht, etwas funktionierenden Java-Code für die Verschlüsselung von Paypal-Schaltflächen zu erhalten. Das ist keine leichte Aufgabe! Selbst wenn ich von Paypal Code bekomme, bin ich mit Fehlern konfrontiert.

Hier ist also das, was ich bis jetzt habe, dass ich denke, dass es irgendwann funktionieren wird.

Ich habe die Java.Zip-Datei von der Paypal-Website heruntergeladen. Darin befinden sich zwei Klassen - ClientSide.Java und ButtonEncryption.Java

Das Problem - Ich bekomme einen InvalidKeyException : Illegal key size-Fehler.

Fragen
1) Wie löse ich dieses Problem? 2) Welche Codezeile wirft den Fehler?

C:\jakarta-Tomcat\webapps\PlanB\WEB-INF\classes>Java palmb.servlets.Paypal.ButtonEncryption
Java.io.IOException: exception decrypting data - Java.security.InvalidKeyException: Illegal key size
        at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.cryptData(Unknown Source)
        at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(Unknown Source)
        at Java.security.KeyStore.load(Unknown Source)
        at palmb.servlets.Paypal.ClientSide.getButtonEncryptionValue(ClientSide.Java:63)
        at palmb.servlets.Paypal.ButtonEncryption.main(ButtonEncryption.Java:81)


ClientSide-Klasse

package palmb.servlets.Paypal;

import Java.io.ByteArrayOutputStream;
import Java.io.FileInputStream;
import Java.io.IOException;
import Java.io.PrintWriter;
import Java.security.InvalidAlgorithmParameterException;
import Java.security.KeyStore;
import Java.security.KeyStoreException;
import Java.security.NoSuchAlgorithmException;
import Java.security.NoSuchProviderException;
import Java.security.PrivateKey;
import Java.security.UnrecoverableKeyException;
import Java.security.cert.CertStore;
import Java.security.cert.CertStoreException;
import Java.security.cert.CertificateException;
import Java.security.cert.CertificateFactory;
import Java.security.cert.CollectionCertStoreParameters;
import Java.security.cert.X509Certificate;
import Java.util.ArrayList;
import Java.util.Enumeration;

import org.bouncycastle.cms.CMSEnvelopedData;
import org.bouncycastle.cms.CMSEnvelopedDataGenerator;
import org.bouncycastle.cms.CMSException;
import org.bouncycastle.cms.CMSProcessableByteArray;
import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.cms.CMSSignedDataGenerator;
import org.bouncycastle.openssl.PEMReader;
import org.bouncycastle.util.encoders.Base64;

/**
 */
public class ClientSide 
{
    private String  keyPath;
    private String  certPath;
    private String  paypalCertPath;
    private String  keyPass;

    public ClientSide( String keyPath, String certPath, String paypalCertPath, String keyPass )
    {
        this.keyPath = keyPath;
        this.certPath = certPath;
        this.paypalCertPath = paypalCertPath;
        this.keyPass = keyPass;
    }   

    public String getButtonEncryptionValue(String _data, String _privateKeyPath, String _certPath, String _payPalCertPath,
                                            String _keyPass) throws IOException,CertificateException,KeyStoreException,
                                            UnrecoverableKeyException,InvalidAlgorithmParameterException,NoSuchAlgorithmException,
                                            NoSuchProviderException,CertStoreException,CMSException {
        _data = _data.replace(',', '\n');
        CertificateFactory cf = CertificateFactory.getInstance("X509", "BC");

        // Read the Private Key
        KeyStore ks = KeyStore.getInstance("PKCS12", "BC");
        ks.load( new FileInputStream(_privateKeyPath), _keyPass.toCharArray() );

        String keyAlias = null;
        Enumeration aliases = ks.aliases();
        while (aliases.hasMoreElements()) {
            keyAlias = (String) aliases.nextElement();
        }

        PrivateKey privateKey = (PrivateKey) ks.getKey( keyAlias, _keyPass.toCharArray() );

        // Read the Certificate
        X509Certificate certificate = (X509Certificate) cf.generateCertificate( new FileInputStream(_certPath) );

        // Read the Paypal Cert
        X509Certificate payPalCert = (X509Certificate) cf.generateCertificate( new FileInputStream(_payPalCertPath) );

        // Create the Data
        byte[] data = _data.getBytes();

        // Sign the Data with my signing only key pair
        CMSSignedDataGenerator signedGenerator = new CMSSignedDataGenerator();

        signedGenerator.addSigner( privateKey, certificate, CMSSignedDataGenerator.DIGEST_SHA1 );

        ArrayList certList = new ArrayList();
        certList.add(certificate);
        CertStore certStore = CertStore.getInstance( "Collection", new CollectionCertStoreParameters(certList) );
        signedGenerator.addCertificatesAndCRLs(certStore);

        CMSProcessableByteArray cmsByteArray = new CMSProcessableByteArray(data);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        cmsByteArray.write(baos);
        System.out.println( "CMSProcessableByteArray contains [" + baos.toString() + "]" );

        CMSSignedData signedData = signedGenerator.generate(cmsByteArray, true, "BC");

        byte[] signed = signedData.getEncoded();

        CMSEnvelopedDataGenerator envGenerator = new CMSEnvelopedDataGenerator();
        envGenerator.addKeyTransRecipient(payPalCert);
        CMSEnvelopedData envData = envGenerator.generate( new CMSProcessableByteArray(signed),
                CMSEnvelopedDataGenerator.DES_EDE3_CBC, "BC" );

        byte[] pkcs7Bytes = envData.getEncoded();


        return new String( DERtoPEM(pkcs7Bytes, "PKCS7") );

    }

    public static byte[] DERtoPEM(byte[] bytes, String headfoot) 
    {
        ByteArrayOutputStream pemStream = new ByteArrayOutputStream();
        PrintWriter writer = new PrintWriter(pemStream);

        byte[] stringBytes = Base64.encode(bytes);

        System.out.println("Converting " + stringBytes.length + " bytes");

        String encoded = new String(stringBytes);

        if (headfoot != null) {
            writer.print("-----BEGIN " + headfoot + "-----\n");
        }

        // write 64 chars per line till done
        int i = 0;
        while ((i + 1) * 64 < encoded.length()) {
            writer.print(encoded.substring(i * 64, (i + 1) * 64));
            writer.print("\n");
            i++;
        }
        if (encoded.length() % 64 != 0) {
            writer.print(encoded.substring(i * 64)); // write remainder
            writer.print("\n");
        }
        if (headfoot != null) {
            writer.print("-----END " + headfoot + "-----\n");
        }
        writer.flush();
        return pemStream.toByteArray();
    }

}


ButtonEncryption-Klasse

package palmb.servlets.Paypal;

//import com.Paypal.crypto.sample.*;

import palmb.servlets.Paypal.ClientSide;

import Java.io.*;
import Java.security.InvalidAlgorithmParameterException;
import Java.security.KeyStoreException;
import Java.security.NoSuchAlgorithmException;
import Java.security.NoSuchProviderException;
import Java.security.Security;
import Java.security.UnrecoverableKeyException;
import Java.security.cert.CertStoreException;
import Java.security.cert.CertificateException;
import org.bouncycastle.cms.CMSException;

/**
 */
public class ButtonEncryption {


    //path to public cert
    private static String certPath = "C:/jakarta-Tomcat/webapps/PlanB/Certs/public-cert.pem";

    //path to private key in PKCS12 format
    private static String keyPath = "C:/jakarta-Tomcat/webapps/PlanB/Certs/my_pkcs12.p12";

    //path to Paypal's public cert
    private static String paypalCertPath = "C:/jakarta-Tomcat/webapps/PlanB/Certs/Paypal_cert_pem.txt";

    //private key password
    private static String keyPass = "password"; //will be replaced with actual password when compiled and executed

    //the button command, properties/parameters
    private static String cmdText = "cmd=_xclick\[email protected]\nitem_name=vase\nitemprice=25.00";  //cmd=_xclick,[email protected],amount=1.00,currency_code=USD

    //output file for form code
    private static String output = "test.html";


    public static void main(String[] args) 
    {
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 


        String stage = "sandbox";

        try 
        {
            ClientSide client_side = new ClientSide( keyPath, certPath, paypalCertPath, keyPass );

            String result = client_side.getButtonEncryptionValue( cmdText, keyPath, certPath, paypalCertPath, keyPass );

            File outputFile = new File( output );
            if ( outputFile.exists() )
                outputFile.delete();

            if ( result != null && result != "")
            {
                try {        
                    OutputStream fout= new FileOutputStream( output );
                    OutputStream bout= new BufferedOutputStream(fout);
                    OutputStreamWriter out = new OutputStreamWriter(bout, "US-ASCII");

                    out.write( "<form action=\"https://www." );
                    out.write( stage );
                    out.write( "Paypal.com/cgi-bin/webscr\" method=\"post\">" );  
                    out.write( "<input type=\"hidden\" name=\"cmd\" value=\"_s-xclick\">" );  ;
                    out.write( "<input type=\"image\" src=\"https://www." );
                    out.write( stage );
                    out.write( "Paypal.com/en_US/i/btn/x-click-but23.gif\" border=\"0\" name=\"submit\" " );
                    out.write( "alt=\"Make payments with Paypal - it's fast, free and secure!\">" );
                    out.write( "<input type=\"hidden\" name=\"encrypted\" value=\"" );
                    out.write( result );
                    out.write( "\">" );
                    out.write( "</form>");

                    out.flush();  // Don't forget to flush!
                    out.close();
                  }
                  catch (UnsupportedEncodingException e) {
                    System.out.println(
                     "This VM does not support the ASCII character set."
                    );
                  }
                  catch (IOException e) {
                    System.out.println(e.getMessage());        
                  }
            }
        } 
        catch (NoSuchAlgorithmException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (NoSuchProviderException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (CMSException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (CertificateException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (KeyStoreException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (UnrecoverableKeyException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (InvalidAlgorithmParameterException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (CertStoreException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}


Bearbeitet: Info über Schlüssel/Zertifikate

Ich habe den privaten Schlüssel und das öffentliche Zertifikat mit OpenSSL über die folgenden Befehle generiert.
Privat Schlüssel
openssl genrsa -out private-key.pem 1024
Öffentliches Zertifikat
openssl req -new -key private-key.pem -x509 -days 1095 -out public-cert.pem
Erstellte PKCS12-Datei
openssl pkcs12 -export -in public-cert.pem -inkey private-key.pem -out my_pkcs12.p12


Außerdem musste ich das öffentliche Paypal-Zertifikat von der Paypal-Website herunterladen.


Editiert - Hinzufügen von Kompilierungswarnungen - BouncyCastle

C:\jakarta-Tomcat\webapps\PlanB\WEB-INF\classes>javac .\palmb\servlets\Paypal\ClientSide.Java -Xlint
.\palmb\servlets\Paypal\ClientSide.Java:85: warning: [deprecation] addSigner(Java.security.PrivateKey,Java.security.cert.X509Certificate,Java.lang.String) in org.bouncycastle.cms.CMSSignedDataGenerator has been deprecated
                signedGenerator.addSigner( privateKey, certificate, CMSSignedDat
aGenerator.DIGEST_SHA1 );
                               ^
.\palmb\servlets\Paypal\ClientSide.Java:88: warning: [unchecked] unchecked call
to add(E) as a member of the raw type Java.util.ArrayList
                certList.add(certificate);
                            ^
.\palmb\servlets\Paypal\ClientSide.Java:90: warning: [deprecation] addCertificatesAndCRLs(Java.security.cert.CertStore) in org.bouncycastle.cms.CMSSignedGenerat
or has been deprecated
                signedGenerator.addCertificatesAndCRLs(certStore);
                               ^
.\palmb\servlets\Paypal\ClientSide.Java:97: warning: [deprecation] generate(org.
bouncycastle.cms.CMSProcessable,boolean,Java.lang.String) in org.bouncycastle.cm
s.CMSSignedDataGenerator has been deprecated
                CMSSignedData signedData = signedGenerator.generate(cmsByteArray, true, "BC");
                                                          ^
.\palmb\servlets\Paypal\ClientSide.Java:102: warning: [deprecation] addKeyTransR
ecipient(Java.security.cert.X509Certificate) in org.bouncycastle.cms.CMSEnvelope
dGenerator has been deprecated
                envGenerator.addKeyTransRecipient(payPalCert);
                            ^
.\palmb\servlets\Paypal\ClientSide.Java:103: warning: [deprecation] generate(org.bouncycastle.cms.CMSProcessable,Java.lang.String,Java.lang.String) in org.bouncycastle.cms.CMSEnvelopedDataGenerator has been deprecated
                CMSEnvelopedData envData = envGenerator.generate( new CMSProcess
ableByteArray(signed),
                                                       ^
6 warnings


Installationsschritte für JCE-Richtliniendateien

Dies sind die Schritte, die ich zur Installation der JCE Unlimited Strength Policy-Dateien unternommen habe:
1) Ging zu Java JCE Download Seite auf Oracle.
2) Extrahierte Dateien aus Zip.
3) Dateien local_policy.jar und US_export_policy.jar im Ordner C:\Java\jdk1.6.0_22\jre\lib\security platziert. 
Hinweis: C:\Java\jdk1.6.0_22 ist auf% Java_HOME% .__ eingestellt.
4) Der Systemklassenpfad wurde aktualisiert, um die Position der Jars einzuschließen
Hinweis: Es gibt andere Dateien, die mit dem JDK 1.6 im Sicherheitsordner enthalten sind, einschließlich: Java.policy, Java.security, javaws.policy, trusted.libraries - aber diese haben wahrscheinlich nichts mit den JCE-Dateien zu tun , Recht?


Bearbeiten 23.06.2011 - Ergebnisse nach weiterer Konfiguration

Ich besuchte die Bouncy Castle-Seite unter http://www.bouncycastle.org/specifications.html#install
Blättern Sie nach unten zu 5.0 Bouncy Castle Provider und lesen Sie dann die Informationen unter 5.1 Example. Es wird erwähnt, dass der Java.security-Datei ein Parameter für den Bouncy Castle Provider hinzugefügt wird. Meine Datei befindet sich unter C:\Java\jdk1.6.0_22\jre\lib\security.

Ich habe meiner Datei die folgende Zeile hinzugefügt - security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider 

Außerdem entdeckte ich, dass ich die Bouncy Castle-Gläser nicht zum Klassenpfad hinzugefügt hatte, also machte ich weiter und tat es .. _.

Nachdem ich diese Änderungen vorgenommen und ClientSide.Java neu kompiliert und versucht habe, sie auszuführen, erhalte ich dieselbe Ausnahme: Aber vielleicht sollte der Schwerpunkt auf dem Teil der Ausnahme liegen, wo dies über den Bouncycastle-Anbieter gesagt wird.

at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.cryptData(Unknown Source)
at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(Unknown Source)

@PeteyB - Ich bin sicher, dass ich die Richtliniendateien korrekt installiert habe. Gibt es noch etwas, was ich vorschlagen kann? Können Sie sich die Bouncy Castle-Site @ http://www.bouncycastle.org/specifications.html#install ansehen und sehen, ob etwas fehlt, was ich vermisse?

36
katura

Das Problem muss also bei Ihrer JCE Unlimited Strength-Installation liegen. 

Stellen Sie sicher, dass Sie local_policy.jar und US_export_policy.jar sowohl im jdk1.6.0_25\jre\lib\security\ Ihres JDK als auch im lib\security\-Ordner Ihrer JRE überschreiben.

In meinem Fall würde ich die neuen .jars einfügen:

C:\Program Files\Java\jdk1.6.0_25\jre\lib\security

und

C:\Program Files\Java\jre6\lib\security


Wenn Sie Java 8 ausführen und dieses Problem auftritt. Nachfolgende Schritte sollten helfen!

Gehen Sie zu Ihrer JRE-Installation (z. B. - jre1.8.0_181\lib\security\policy\unlimited), kopieren Sie local_policy.jar und ersetzen Sie sie durch 'local_policy.jar' in Ihrem JDK-Installationsverzeichnis (z. B. - jdk1.8.0_141.)\jre\lib\security). 

73
Petey B

Wenn Sie weiterhin die InvalidKeyException empfangen, wenn Sie mein AES-Verschlüsselungsprogramm mit 256-Bit-Schlüsseln ausführen, jedoch nicht mit 128-Bit-Schlüsseln, liegt dies daran, dass Sie die neuen Richtlinien-JAR-Dateien nicht ordnungsgemäß installiert haben und nichts mit BouncyCastle zu tun haben (was auch der Fall ist durch diese Richtliniendateien eingeschränkt). Versuchen Sie, Java zu deinstallieren, anschließend erneut zu installieren und das alte Glas durch das neue mit unbegrenzter Stärke zu ersetzen. Ansonsten habe ich keine Ideen, viel Glück.

Sie können die Richtliniendateien selbst sehen, wenn Sie die Dateien lib/security/local_policy.jar und US_export_policy.jar in winzip öffnen und die zusammengefügten * .policy-Dateien im Editor anzeigen und sicherstellen, dass sie folgendermaßen aussehen:

default_local.policy:

    // Country-specific policy file for countries with no limits on crypto strength.
grant {
    // There is no restriction to any algorithms.
    permission javax.crypto.CryptoAllPermission; 
};

default_US_export.policy:

// Manufacturing policy file.
grant {
    // There is no restriction to any algorithms.
    permission javax.crypto.CryptoAllPermission; 
};
6
Petey B

Fügen Sie folgenden Code in Ihren Client-Code ein:

static {
    Security.insertProviderAt(new BouncyCastleProvider(),1);
 }

in diesem Fall müssen Sie keinen Eintrag in der Java.security-Datei hinzufügen.

4
Anil Verma

Der Fehler scheint geworfen zu werden, wenn Sie versuchen, den Keystore von "C: /jakarta-Tomcat/webapps/PlanB/Certs/my_pkcs12.p12" hier zu laden:

ks.load( new FileInputStream(_privateKeyPath), _keyPass.toCharArray() ); 

Haben Sie versucht, "/" durch "\\" in Ihrem Dateipfad zu ersetzen? Wenn dies nicht hilft, hat es wahrscheinlich mit den Richtliniendateien zu Unlimited Strength Jurisdiction zu tun. Sie können dies überprüfen, indem Sie ein kleines Programm schreiben, das AES-Verschlüsselung ausführt. Versuchen Sie, mit einem 128-Bit-Schlüssel zu verschlüsseln. Wenn dies funktioniert, versuchen Sie es mit einem 256-Bit-Schlüssel und sehen Sie, ob er fehlschlägt. 

Code, der AES-Encyrption ausführt:

import Java.io.UnsupportedEncodingException;
import Java.security.InvalidAlgorithmParameterException;
import Java.security.InvalidKeyException;
import Java.security.NoSuchAlgorithmException;
import Java.security.NoSuchProviderException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class Test 
{
    final String ALGORITHM = "AES";                       //symmetric algorithm for data encryption
    final String PADDING_MODE = "/CBC/PKCS5Padding";      //Padding for symmetric algorithm
    final String CHAR_ENCODING = "UTF-8";                 //character encoding
    //final String CRYPTO_PROVIDER = "SunMSCAPI";             //provider for the crypto

    int AES_KEY_SIZE = 256;  //symmetric key size (128, 192, 256) if using 256 you must have the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files  installed

    private String doCrypto(String plainText) throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException, UnsupportedEncodingException
    {
        byte[] dataToEncrypt = plainText.getBytes(CHAR_ENCODING);

        //get the symmetric key generator
        KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
        keyGen.init(AES_KEY_SIZE); //set the key size

        //generate the key
        SecretKey skey = keyGen.generateKey();

        //convert to binary
        byte[] rawAesKey = skey.getEncoded();

        //initialize the secret key with the appropriate algorithm
        SecretKeySpec skeySpec = new SecretKeySpec(rawAesKey, ALGORITHM);

        //get an instance of the symmetric cipher
        Cipher aesCipher = Cipher.getInstance(ALGORITHM + PADDING_MODE);

        //set it to encrypt mode, with the generated key
        aesCipher.init(Cipher.ENCRYPT_MODE, skeySpec);

        //get the initialization vector being used (to be returned)
        byte[] aesIV = aesCipher.getIV();

        //encrypt the data
        byte[] encryptedData = aesCipher.doFinal(dataToEncrypt);    

        //initialize the secret key with the appropriate algorithm
        SecretKeySpec skeySpecDec = new SecretKeySpec(rawAesKey, ALGORITHM);

        //get an instance of the symmetric cipher
        Cipher aesCipherDec = Cipher.getInstance(ALGORITHM +PADDING_MODE);

        //set it to decrypt mode with the AES key, and IV
        aesCipherDec.init(Cipher.DECRYPT_MODE, skeySpecDec, new IvParameterSpec(aesIV));

        //decrypt and return the data
        byte[] decryptedData = aesCipherDec.doFinal(encryptedData);

        return new String(decryptedData, CHAR_ENCODING);
    }

    public static void main(String[] args)
    {
        String text = "Lets encrypt me";

        Test test = new Test();

        try {
            System.out.println(test.doCrypto(text));
        } catch (InvalidKeyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchProviderException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (BadPaddingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Funktioniert dieser Code für Sie?

Möglicherweise möchten Sie auch versuchen, Ihren Hüpfburgenanbieter in dieser Zeile anzugeben:

Cipher.getInstance(ALGORITHM +PADDING_MODE, "YOUR PROVIDER");

Und sehen, ob es ein Fehler sein könnte, der mit Hüpfburg verbunden ist.

1
Petey B

Ich stand vor demselben Problem. Es wurde versucht, zuerst US_export_policy.jar und local_policy.jar im Java-Sicherheitsordner hinzuzufügen, das Problem blieb jedoch bestehen. Dann fügte ich unten in Java_opts in Tomcat setenv.shfile ein und es funktionierte.

-Djdk.tls.ephemeralDHKeySize=2048

Bitte überprüfen Sie diesen Link für weitere Informationen

0
Divya S