সুরক্ষা ইতিমধ্যে একটি শক্ত বিষয়, তবে সর্বাধিক জনপ্রিয় সমাধানটি হ'ল সুরক্ষিত স্বাক্ষরগুলি মুছে ফেলা আমি হতাশ। জেসিই-র এই স্বাক্ষর প্রয়োজন । মাভেন শেড বাউন্সিস্টল জার ফাইলটি বিস্ফোরিত করে যা স্বাক্ষরগুলি মেটা-আইএনএফ-তে রাখে, তবে বাউন্সি ক্যাসল স্বাক্ষরগুলি নতুন, উবার-জারের জন্য বৈধ নয় (কেবলমাত্র বিসি জারের জন্য), এবং এই কারণেই এই থ্রেডে অবৈধ স্বাক্ষর ত্রুটির কারণ ঘটেছে ।
হ্যাঁ, @ruhsuzbaykus এর পরামর্শ অনুসারে স্বাক্ষরগুলি বাদ দেওয়া বা মুছে ফেলার ফলে আসল ত্রুটিটি প্রকৃতপক্ষে চলে যায়, তবে এটি নতুন, ক্রিপ্টিক ত্রুটিও ঘটাতে পারে:
java.security.NoSuchAlgorithmException: PBEWithSHA256And256BitAES-CBC-BC SecretKeyFactory not available
স্পষ্টভাবে নির্দিষ্ট করে দিয়ে কোথায় এই জাতীয় অ্যালগরিদম পাওয়া যায়:
SecretKeyFactory.getInstance("PBEWithSHA256And256BitAES-CBC-BC","BC");
আমি একটি ভিন্ন ত্রুটি পেতে সক্ষম হয়েছিল:
java.security.NoSuchProviderException: JCE cannot authenticate the provider BC
জেসিই সরবরাহকারীকে প্রমাণীকরণ করতে পারে না কারণ আমরা একই থ্রেডের পরামর্শটি অন্যত্র অনুসরণ করে ক্রিপ্টোগ্রাফিক স্বাক্ষরগুলি মুছে ফেলেছি ।
আমি যে সমাধানটি পেয়েছি সেটি হ'ল এক্সিকিউটেবল প্যাকার প্লাগইন যা একক, এক্সিকিউটেবল জারে বাউনসিস্টল স্বাক্ষর সংরক্ষণের জন্য জার-ইন-জার পদ্ধতির ব্যবহার করে ।
আপডেট :
এটি করার আরেকটি উপায় (সঠিক উপায়?) হল মাভেন জার সাইনার ব্যবহার করা । এটি আপনাকে সুরক্ষা ত্রুটি না পেয়ে ম্যাভেন শেড ব্যবহার চালিয়ে যাওয়ার অনুমতি দেয়। তবুও, আপনার অবশ্যই একটি কোড সাইনিং শংসাপত্র থাকতে হবে (ওরাকল "জাভা কোড সাইনিং শংসাপত্রের জন্য অনুসন্ধান করার পরামর্শ দেয়)"। POM কনফিগারেশনটি দেখতে এমন দেখাচ্ছে:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>org.bouncycastle:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>your.class.here</mainClass>
</transformer>
</transformers>
<shadedArtifactAttached>true</shadedArtifactAttached>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>sign</id>
<goals>
<goal>sign</goal>
</goals>
</execution>
<execution>
<id>verify</id>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<keystore>/path/to/myKeystore</keystore>
<alias>myfirstkey</alias>
<storepass>111111</storepass>
<keypass>111111</keypass>
</configuration>
</plugin>
না, কোনও স্ব-স্বাক্ষরিত সার্টিফিকেট স্বীকৃতি দেওয়ার জন্য জেসিইর পাওয়ার কোনও উপায় নেই, সুতরাং যদি আপনাকে বাউনিসিস্টল শংসাপত্রগুলি সংরক্ষণ করার দরকার হয় তবে আপনাকে জার-ইন-জার প্লাগইন ব্যবহার করতে হবে বা জেসিই সার্টিফিকেট পেতে হবে।