Java Security: ขนาดคีย์ผิดกฎหมายหรือพารามิเตอร์เริ่มต้น?


409

ฉันได้ถามคำถามเกี่ยวกับเรื่องนี้ก่อนหน้านี้ แต่มันไม่ได้รับคำตอบที่ถูกต้องและนำไปสู่ที่ใด

ดังนั้นฉันจึงชี้แจงรายละเอียดเล็ก ๆ น้อย ๆ เกี่ยวกับปัญหาและฉันอยากจะได้ยินความคิดของคุณเกี่ยวกับวิธีที่ฉันจะแก้ไขปัญหานี้หรือสิ่งที่ฉันควรลอง

ฉันติดตั้งJava 1.6.0.12บนเซิร์ฟเวอร์ Linux แล้วและโค้ดด้านล่างทำงานได้อย่างสมบูรณ์แบบ

String key = "av45k1pfb024xa3bl359vsb4esortvks74sksr5oy4s5serondry84jsrryuhsr5ys49y5seri5shrdliheuirdygliurguiy5ru";
try {
    Cipher c = Cipher.getInstance("ARCFOUR");

    SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "ARCFOUR");
    c.init(Cipher.DECRYPT_MODE, secretKeySpec);

    return new String(c.doFinal(Hex.decodeHex(data.toCharArray())), "UTF-8");

} catch (InvalidKeyException e) {
    throw new CryptoException(e);
}

วันนี้ฉันติดตั้งJava 1.6.0.26บนผู้ใช้เซิร์ฟเวอร์ของฉันและเมื่อฉันพยายามเรียกใช้แอปพลิเคชันของฉันฉันได้รับข้อยกเว้นต่อไปนี้ ฉันเดาว่ามันมีบางอย่างที่เกี่ยวข้องกับการกำหนดค่าการติดตั้ง Java เพราะใช้งานได้ในเครื่องแรก แต่ไม่สามารถใช้งานได้ในรุ่นที่ใหม่กว่า

Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at my.package.Something.decode(RC4Decoder.java:25) ~[my.package.jar:na]
    ... 5 common frames omitted

บรรทัด 25คือ: c.init(Cipher.DECRYPT_MODE, secretKeySpec);

หมายเหตุ:
java.security * บนเซิร์ฟเวอร์ของ1.6.0.12การแข่งขันไดเรกทอรี Java เกือบสมบูรณ์กับ1.6.0.26ไฟล์ java.security ไม่มีผู้ให้บริการเพิ่มเติมในรายแรก
* คำถามก่อนหน้านี้ที่นี่



4
สิ่งนี้อาจถูกโยนออกมาเป็นข้อผิดพลาด: Caused by: java.security.InvalidKeyException: Illegal key size(โดยไม่มี "หรือพารามิเตอร์เริ่มต้น") ใน Java 8
hackajar

เพียงใช้ OpenJDK และจะใช้งานได้
Rodrigo Asensio

@RodrigoAsensio: ฉันใช้ OpenJDK และใช้ไม่ได้ คุณต้องติดตั้งไฟล์ jar ของไฟล์ Strength Jurisdiction Policy ที่ไม่ จำกัด แล้วมันจะทำงาน
anjanb

5
อัปเดตเป็น @AniketThakur answer ตั้งแต่ Java 9 และ Java 8u151 ไม่จำเป็นต้องดาวน์โหลดและติดตั้งไฟล์นโยบายเขตอำนาจศาลอีกต่อไป หากต้องการเปิดใช้งานการเข้ารหัสแบบไม่ จำกัด ผู้ใช้สามารถใช้คุณสมบัติความปลอดภัย crypto.policy ใหม่ หากตั้งค่าคุณสมบัติความปลอดภัยใหม่ (crypto.policy) ในไฟล์ java.security หรือได้รับการตั้งค่าแบบไดนามิกโดยใช้การเรียกใช้ Security.setProperty () ก่อนเฟรมเวิร์ก JCE เริ่มต้นการตั้งค่านั้นจะได้รับเกียรติ โดยค่าเริ่มต้นคุณสมบัติจะไม่ได้กำหนด
Marcin Kłopotek

คำตอบ:


722

เป็นไปได้ว่าคุณไม่มีไฟล์ความแข็งแกร่งไม่ จำกัด ที่ติดตั้งอยู่ในขณะนี้

คุณอาจต้องดาวน์โหลดไฟล์นี้:

ไฟล์ Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy 6

ดาวน์โหลดไฟล์ Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy 7

ดาวน์โหลด Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy 8 ไฟล์ (จำเป็นสำหรับรุ่นก่อน Java 8 u162 เท่านั้น)

สารสกัดจากไฟล์ jar ${java.home}/jre/lib/security/จากซิปและบันทึกไว้ใน


2
@JamesBlack - อ้อและเพื่อให้แน่ใจว่าฐานทั้งหมดถูกปกคลุมฉันใส่ภายใต้ JAR ของJava/jre/lib/security, และJava/jdk/lib/security Java/jdk/jre/lib/securityการเรียกใช้ 'java -version' จะคืนค่ารายละเอียดที่คาดไว้
aroth

5
สำหรับ SDK ของ IBM (เช่น WebSphere) ให้ดาวน์โหลดไฟล์นโยบายการ จำกัดขอบเขต
quietmint

4
ตั้งแต่ Java 9 และ Java 8u151 ไม่จำเป็นต้องดาวน์โหลดและติดตั้งไฟล์นโยบายเขตอำนาจศาลอีกต่อไป หากต้องการเปิดใช้งานการเข้ารหัสแบบไม่ จำกัด ผู้ใช้สามารถใช้คุณสมบัติความปลอดภัย crypto.policy ใหม่ หากตั้งค่าคุณสมบัติความปลอดภัยใหม่ (crypto.policy) ในไฟล์ java.security หรือได้รับการตั้งค่าแบบไดนามิกโดยใช้การเรียกใช้ Security.setProperty () ก่อนเฟรมเวิร์ก JCE เริ่มต้นการตั้งค่านั้นจะได้รับเกียรติ โดยค่าเริ่มต้นคุณสมบัติจะไม่ได้กำหนด
Marcin Kłopotek

4
ดังนั้นคำตอบที่อัปเดตนี้จึงล้าสมัยและเลิกใช้แล้ว เราจะ upvote หรือแทนที่คำตอบนี้เพื่อให้stackoverflow.com/a/46857694/2808798สามารถเป็นคำตอบ "ยอมรับ" ได้อย่างไร
Jesse Adelman

3
@JesseAdelman - น่าเสียดายที่นี่มีอายุเกือบ 7 ปีแล้วไม่สามารถทำได้มากนัก ใครก็ตามที่ถามจะต้องเปลี่ยนมัน
James Black

54

ไฟล์เขตอำนาจศาล JRE / JDK / Java 8 อยู่ที่นี่:

ดาวน์โหลดไฟล์ Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy 8

เช่นเดียวกับเจมส์กล่าวไว้ข้างต้น:
ติดตั้งไฟล์${java.home}/jre/lib/security/มา


2
พยายามใช้ 6 และ 7 แต่ไม่ได้ผล ต้องติดตั้ง 8 ขอบคุณ
Jason Kim

9
รุ่นใหม่ JDK 8u151 มี "คุณสมบัติความปลอดภัยใหม่เพื่อควบคุมนโยบายการเข้ารหัส" ตอนนี้มันเปลี่ยนคุณสมบัติเป็น บรรทัดด้านล่าง: ลบ "#" ออกจากบรรทัด "# crypto.policy = unlimited" ใน "lib \ security \ java.security" เพื่อเปิดใช้งานโดยใช้คีย์ 256 บิต oracle.com/technetwork/java/javase/8u151-relnotes-3850493.html
hemisphire

1
ขอบคุณ! เนื่องจากนี่เป็นคุณสมบัติด้านความปลอดภัยคุณจึงสามารถโทรไปที่ Security.setProperty ("crypto.policy", "unlimited") ที่มา: ลิงค์ของ @hemisphire :)
Fluf

42

สำหรับ JAVA 7 ลิงค์ดาวน์โหลดนั้นคือjce-7-download

คัดลอกไหที่ดาวน์โหลดมาสองขวดใน Java \ jdk1.7.0_10 \ jre \ lib \ security
ใช้การสำรองข้อมูลของโหลที่เก่ากว่าเพื่อให้ปลอดภัยกว่า

สำหรับ JAVA 8 ลิงค์ดาวน์โหลดคือjce-8-download
คัดลอก jars ที่ดาวน์โหลดใน Java \ jdk1.8.0_45 \ jre \ lib \ security
ใช้การสำรองข้อมูลของโหลที่เก่ากว่าเพื่อให้ปลอดภัย


39

ด้วย Java 9, Java 8u161 , Java 7u171และJava 6u181ข้อ จำกัด จะถูกปิดใช้งานในขณะนี้โดยค่าเริ่มต้น ดูปัญหาในชวาฐานข้อมูลข้อผิดพลาด


เริ่มต้นด้วยJava 8u151คุณสามารถปิดการ จำกัด การเขียนโปรแกรมได้

ในรีลีสที่เก่ากว่าต้องดาวน์โหลดและติดตั้งไฟล์เขตอำนาจศาล JCE แยกต่างหากเพื่อให้ JDK ใช้การเข้ารหัสแบบไม่ จำกัด ขั้นตอนการดาวน์โหลดและติดตั้งนั้นไม่จำเป็นอีกต่อไป

แต่ตอนนี้คุณสามารถเรียกใช้บรรทัดต่อไปนี้ก่อนที่จะใช้คลาส JCE ครั้งแรก (เช่นควรเริ่มต้นหลังจากเริ่มต้นแอปพลิเคชัน):

Security.setProperty("crypto.policy", "unlimited");

แล้ว Android ล่ะ วิธีการ จำกัด ของข้อ จำกัด เหล่านี้สามารถแก้ไขได้ในระดับใด?
TheRealChx101

31

นี่คือรหัสทางออกเดียว ไม่จำเป็นต้องดาวน์โหลดหรือยุ่งกับไฟล์กำหนดค่า

มันเป็นวิธีการสะท้อนที่สะท้อนผ่านการทดสอบบนจาวา 8

เรียกวิธีนี้หนึ่งครั้งในโปรแกรมของคุณ

// นำเข้า

import javax.crypto.Cipher;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Map;

//วิธี

public static void fixKeyLength() {
    String errorString = "Failed manually overriding key-length permissions.";
    int newMaxKeyLength;
    try {
        if ((newMaxKeyLength = Cipher.getMaxAllowedKeyLength("AES")) < 256) {
            Class c = Class.forName("javax.crypto.CryptoAllPermissionCollection");
            Constructor con = c.getDeclaredConstructor();
            con.setAccessible(true);
            Object allPermissionCollection = con.newInstance();
            Field f = c.getDeclaredField("all_allowed");
            f.setAccessible(true);
            f.setBoolean(allPermissionCollection, true);

            c = Class.forName("javax.crypto.CryptoPermissions");
            con = c.getDeclaredConstructor();
            con.setAccessible(true);
            Object allPermissions = con.newInstance();
            f = c.getDeclaredField("perms");
            f.setAccessible(true);
            ((Map) f.get(allPermissions)).put("*", allPermissionCollection);

            c = Class.forName("javax.crypto.JceSecurityManager");
            f = c.getDeclaredField("defaultPolicy");
            f.setAccessible(true);
            Field mf = Field.class.getDeclaredField("modifiers");
            mf.setAccessible(true);
            mf.setInt(f, f.getModifiers() & ~Modifier.FINAL);
            f.set(null, allPermissions);

            newMaxKeyLength = Cipher.getMaxAllowedKeyLength("AES");
        }
    } catch (Exception e) {
        throw new RuntimeException(errorString, e);
    }
    if (newMaxKeyLength < 256)
        throw new RuntimeException(errorString); // hack failed
}

เครดิต: Delthas


4
โปรดทราบว่านี่อาจเป็นการละเมิดข้อตกลงการอนุญาตให้ใช้สิทธิ์ Java SE: D. ข้อจำกัด ของ JAVA TECHNOLOGY คุณไม่สามารถสร้างแก้ไขหรือเปลี่ยนพฤติกรรมของหรืออนุญาตให้ผู้ใช้สิทธิ์ของคุณสร้างแก้ไขหรือเปลี่ยนพฤติกรรมของคลาสอินเทอร์เฟซหรือแพ็คเกจย่อยที่ระบุว่า "java", "javax", " javafx "," sun "," oracle "หรือการประชุมที่คล้ายกันตามที่ระบุโดย Oracle ในการกำหนดชื่อการประชุมใด ๆ [... ] แหล่งที่มา
SimMac

ขอบคุณมาก


16

ฉันพบข้อผิดพลาดเดียวกันในขณะที่ใช้ Windows 7 x64, Eclipse และ JDK 1.6.0_30 ในโฟลเดอร์การติดตั้ง JDK มีjreโฟลเดอร์อยู่ สิ่งนี้ทำให้ฉันออกตอนแรกเมื่อฉันเพิ่มขวดดังกล่าวไปยังโฟลเดอร์ lib / ความปลอดภัยของ JDK โดยไม่มีโชค เส้นทางแบบเต็ม:

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

ดาวน์โหลดและแตกไฟล์ที่มีอยู่ในjceโฟลเดอร์ของไฟล์เก็บถาวรนี้ลงในโฟลเดอร์นั้น


16

ใน Java โดยค่าเริ่มต้น AES รองรับคีย์ 128 บิตหากคุณวางแผนที่จะใช้คีย์ 192 บิตหรือ 256 บิตคอมไพเลอร์ java จะโยนขนาดคีย์ผิดกฎหมายยกเว้นซึ่งคุณได้รับ

วิธีแก้ปัญหาดังที่ผู้ชนะ & James แนะนำคุณจะต้องดาวน์โหลด JCE (Java Cryptography Extension) ตามเวอร์ชั่น JRE ของคุณ (java6, java7 หรือ java8)

JCE zip มี JAR ดังต่อไปนี้:

  1. local_policy.jar
  2. US_export_policy.jar

<JAVA_HOME>/jre/lib/securityคุณจำเป็นต้องเปลี่ยนขวดเหล่านี้ในรูปแบบของคุณ หากคุณอยู่ในระบบยูนิกซ์อาจจะหมายถึง/home/urs/usr/lib/jvm/java-<version>-oracle/

บางครั้งเพียงแทนที่ local_policy.jar, US_export_policy.jar ในโฟลเดอร์ความปลอดภัยไม่ทำงานบน unix ดังนั้นฉันแนะนำให้คัดลอกโฟลเดอร์ความปลอดภัยไปยังเดสก์ท็อปของคุณก่อนแทนที่โฟลเดอร์ @ Desktop / ความปลอดภัยของ jar ลบโฟลเดอร์ความปลอดภัยจาก / jre / lib / & ย้ายโฟลเดอร์ความปลอดภัยของเดสก์ท็อปไปที่ / jre / lib /

เช่น :: sudo mv security /usr/lib/jvm/java-7-oracle/jre/lib


5

มีการอภิปรายสั้นของสิ่งที่ดูเหมือนจะเป็นปัญหานี้เป็นที่นี่ หน้าที่ลิงก์มาดูเหมือนว่าจะหายไป แต่คำตอบอย่างใดอย่างหนึ่งอาจเป็นสิ่งที่คุณต้องการ:

อันที่จริงแล้วการคัดลอก US_export_policy.jar และ local_policy.jar จาก core / lib / jce ไปยัง $ JAVA_HOME / jre / lib / ความปลอดภัยช่วย ขอบคุณ


ขอบคุณ แต่ฉันมีUS_export_policy.jarและlocal_policy.jarในโฟลเดอร์ lib / ความปลอดภัยของฉันแล้วเมื่อฉันติดตั้ง Java .. และฉันไม่สามารถหา core / lib / jce โดยวิธีการในโฟลเดอร์การติดตั้ง Java ของฉัน
Rihards

5

ปัญหาคือเนื้อหาของไฟล์default_local.policyในlocal_policy.jarในโฟลเดอร์jre \ lib \ securityหากคุณติดตั้ง JRE:

// Some countries have import limits on crypto strength. This policy file
// is worldwide importable.

grant {
    permission javax.crypto.CryptoPermission "DES", 64;
    permission javax.crypto.CryptoPermission "DESede", *;
    permission javax.crypto.CryptoPermission "RC2", 128,
                                     "javax.crypto.spec.RC2ParameterSpec", 128;
    permission javax.crypto.CryptoPermission "RC4", 128;
    permission javax.crypto.CryptoPermission "RC5", 128,
          "javax.crypto.spec.RC5ParameterSpec", *, 12, *;
    permission javax.crypto.CryptoPermission "RSA", *;
    permission javax.crypto.CryptoPermission *, 128;
};

หากคุณไม่ต้องการการตั้งค่าที่ถูกต้องทั่วโลกคุณสามารถแก้ไขไฟล์นี้และเปลี่ยนเนื้อหาเป็น

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

นี่คือสิ่งที่จะได้รับหากคุณดาวน์โหลด JCE จาก Oracle


4

ฉันยังได้รับปัญหา แต่หลังจากแทนที่หนึ่งที่มีอยู่ด้วยการดาวน์โหลด (จาก JCE) หนึ่งแก้ไขปัญหา ไฟล์ crypto ใหม่มอบความแรงไม่ จำกัด


2

ตามค่าเริ่มต้น Java รองรับขนาดคีย์ AES 128 บิต (16 ไบต์) เท่านั้นสำหรับการเข้ารหัส Cipherถ้าคุณไม่จำเป็นต้องมากกว่าค่าเริ่มต้นได้รับการสนับสนุนคุณสามารถตัดกุญแจสำคัญในขนาดที่เหมาะสมก่อนที่จะใช้ ดูjavadocสำหรับคีย์ที่รองรับค่าเริ่มต้น

นี่เป็นตัวอย่างของการสร้างคีย์ที่จะทำงานกับ JVM เวอร์ชันใด ๆ โดยไม่ต้องแก้ไขไฟล์นโยบาย ใช้ดุลยพินิจของคุณเอง

นี่คือบทความที่ดีเกี่ยวกับว่าขนาดคีย์ 128 ถึง 256 ขนาดมีความสำคัญในบล็อก AgileBits หรือไม่

SecretKeySpec getKey() {
    final pass = "47e7717f0f37ee72cb226278279aebef".getBytes("UTF-8");
    final sha = MessageDigest.getInstance("SHA-256");

    def key = sha.digest(pass);
    // use only first 128 bit (16 bytes). By default Java only supports AES 128 bit key sizes for encryption.
    // Updated jvm policies are required for 256 bit.
    key = Arrays.copyOf(key, 16);
    return new SecretKeySpec(key, AES);
}

Cipherจุดเอกสารชั้นเรียนขนาดคีย์ที่ถูกต้องสำหรับแต่ละประเภทการเข้ารหัสลับ
keaplogik

ดูอัลกอริทึมการเข้ารหัสเอกสาร(เข้ารหัส)ของ Oracle AES: มาตรฐานการเข้ารหัสขั้นสูงตามที่ระบุโดย NIST ใน FIPS 197 หรือที่เรียกว่าอัลกอริทึม Rijndael โดย Joan Daemen และ Vincent Rijmen AES เป็นคีย์เข้ารหัสตัวเลข 128 บิตที่ 128, 192 และ 256 บิต
zaph

อาจเป็นจริง แต่จำเป็นสำหรับ Java แต่ละเวอร์ชันเท่านั้นที่สนับสนุน 128-bit ตามที่ระบุในเอกสารประกอบการเรียน ทดสอบด้วยตัวเองและคุณจะพบว่าคุณจะต้องได้รับขวดนโยบายจากคำตอบของ James Black ในการทำขนาดสำคัญอื่น ๆ
keaplogik

การปรับใช้ AES ใด ๆ ที่ไม่สนับสนุนคีย์ 256 บิตจะไม่มีประโยชน์อย่างยิ่งเนื่องจากจะไม่สามารถถอดรหัสการเข้ารหัส AES จำนวนมากโดยใช้คีย์ 256 บิต
zaph

1
หากจำเป็นต้องใช้คีย์ 256 บิตโซลูชันที่ดีที่สุดอาจเป็นทางออกเดียวคือติดตั้งไฟล์นโยบายหากจำเป็นไม่ตัดทอนคีย์ที่อาจทำให้ระบบความปลอดภัยอ่อนแอลงและอาจไม่สามารถทำงานร่วมกันได้
zaph

2

เริ่มต้นจาก Java 9 หรือ 8u151 คุณสามารถใช้คอมเม้นท์ในไฟล์:

<JAVA_HOME>/jre/lib/security/java.security

และการเปลี่ยนแปลง:

#crypto.policy=unlimited

ถึง

crypto.policy=unlimited

2

หากคุณใช้การกระจาย Linux กับ apt และเพิ่ม webupd8 PPA คุณสามารถรันคำสั่งได้

apt-get install oracle-java8-unlimited-jce-policy

การปรับปรุงอื่น ๆ :

  1. ไฟล์นโยบายการ จำกัด เขตอำนาจศาลไม่ จำกัด รวมอยู่ในJava 9และใช้เป็นค่าเริ่มต้น
  2. เริ่มต้นด้วยการอัปเดต Java 8 161 , Java 8 จะใช้ค่าเริ่มต้นตามนโยบายการ จำกัด อำนาจความแข็งแกร่งไม่ จำกัด
  3. เริ่มต้นด้วยการอัปเดต Java 8 151นโยบายการ จำกัด อำนาจความแข็งแกร่งไม่ จำกัด มีอยู่ใน Java 8 แต่ไม่ได้ใช้งาน ในการเปิดใช้งานคุณต้องแก้ไขไฟล์ java.security ใน<java_home>/jre/lib/security(สำหรับ JDK) หรือ<java_home>/lib/security(สำหรับ JRE) Uncomment (หรือรวม) บรรทัด

    crypto.policy=unlimited

    ตรวจสอบให้แน่ใจว่าคุณแก้ไขไฟล์โดยใช้เอดิเตอร์รันในฐานะผู้ดูแลระบบ การเปลี่ยนแปลงนโยบายจะมีผลบังคับใช้หลังจากรีสตาร์ท JVM

ก่อนที่Java 8 Update 151คำตอบที่เหลือจะใช้ได้ ดาวน์โหลดไฟล์นโยบาย JDC Unlimited Strength Jurisdiction และแทนที่

สำหรับรายละเอียดเพิ่มเติมคุณสามารถอ้างอิงโพสต์บล็อกส่วนตัวของฉันด้านล่าง - วิธีการติดตั้งไฟล์นโยบายการบังคับใช้ความแข็งแกร่งแบบไม่ จำกัด ของ Java Cryptography Extension (JCE)


1

มีสองตัวเลือกในการแก้ไขปัญหานี้

ตัวเลือกหมายเลข 1:ใช้ใบรับรองที่มีความยาวน้อยกว่า RSA 2048

ตัวเลือกหมายเลข 2:คุณจะอัปเดตสองขวดในjre\lib\security สิ่งที่คุณใช้ java http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

หรือคุณใช้ IBM websphere หรือแอ็พพลิเคชันเซิร์ฟเวอร์ใด ๆ ที่ใช้ java ปัญหาหลักที่ฉันเผชิญฉันใช้การรับรองที่มีความยาวสูงสุดเมื่อฉันวางหูบน websphere ข้อยกเว้นเดียวกันจะถูกโยน

Java Security: Illegal key size or default parameters?

ฉันอัพเดต Java intsalled โฟลเดอร์ใน websphere ด้วยสองไห https://www14.software.ibm.com/webapp/iwm/web/reg/pick.do?source=jcesdk&lang=en_US

คุณสามารถตรวจสอบการอ้างอิงได้ที่ลิงค์https://www-01.ibm.com/support/docview.wss?uid=swg21663373


1

ตรวจสอบให้แน่ใจว่าคุณใช้เวอร์ชั่นล่าสุดของ JDK

ในกรณีของฉันฉันได้ใส่ JCE ลงในโฟลเดอร์ JRE แต่ก็ไม่ได้ช่วยอะไร มันเกิดขึ้นเพราะฉันใช้งานโปรเจคจาก IDE โดยตรง (ใช้ JDK)

จากนั้นฉันปรับปรุง JDK และ JRE เป็นรุ่นล่าสุด (1.8.0_211) และปัญหาได้หายไป

รายละเอียดเพิ่มเติม: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8170157


1

ค่าเริ่มต้น JDK รองรับการเข้ารหัสผ่านคีย์ 128 บิตเท่านั้นเนื่องจากข้อ จำกัด ของสหรัฐอเมริกา ดังนั้นเพื่อรองรับการเข้ารหัสจากคีย์ยาว 256 บิตเราต้องแทนที่local_policy.jarและUS_export_policy.jarsใน$JAVA_HOME/java-8-oracle/jre/lib/securityโฟลเดอร์มิฉะนั้นจะให้:

java.security.InvalidKeyException: ขนาดของคีย์ที่ผิดกฎหมายหรือค่าเริ่มต้น


0

คุณต้องไปที่นั่น

/jdk1.8.0_152 | / jre | / lib | / ความปลอดภัย java.security และ uncomment

#crypto.policy=unlimited

ถึง

crypto.policy=unlimited
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.