سؤال

أحاول الاتصال بخادم SSL الذي يتطلب مني مصادقة نفسي. من أجل استخدام SSL على Apache Mina ، أحتاج إلى ملف JKS مناسب. ومع ذلك ، لقد أعطيت فقط ملف .pem.

كيف يمكنني إنشاء ملف JKS من ملف PEM؟

هل كانت مفيدة؟

المحلول

يمكنك القيام به / المستخدمين / {{id} / {{←}يجب أن يكون الطريق عمل عضو مخصص giveacodicetagpre.

نصائح أخرى

إذا كنت ترغب فقط في استيراد شهادة بتنسيق PEM في مفتاح ، فسيقوم KeyTool بالوظيفة:

keytool -import -alias *alias* -keystore cacerts -file *cert.pem*

لقد تطورت http://code.google.com/p/java-keyutil/ الذي يستورد شهادات PEM مباشرة في Java Keystore. الغرض الأساسي هو استيراد حزم شهادة نظام التشغيل PEM متعددة الأجزاء مثل Ca-bundle.crt. غالبًا ما تتضمن الرؤوس التي لا يستطيع KeyTool التعامل معها

</self promotion>

هل حاولت استخدام الحقل linkfilename؟أساسا تبحث عن حقل في القائمة التي تحتوي على Listitemmenu الخاصية تعيين إلى TRUE وإضافة هذه الحقول إلى وجهة نظرك.آمل أن أفهم سؤالك بشكل صحيح.

أنا دائمًا أنسى كيفية القيام بذلك لأنه شيء أقوم به مرة واحدة في حين ، هذا هو الحل الممكن ، وهو يعمل فقط:

  1. انتقل إلى متصفحك المفضل وقم بتنزيل الشهادة الرئيسية من موقع الويب المضمون.
  2. قم بتنفيذ الخطين التاليين من الكود:

    $ openssl x509 -outform der -in GlobalSignRootCA.crt -out GlobalSignRootCA.der
    $ keytool -import -alias GlobalSignRootCA -keystore GlobalSignRootCA.jks -file GlobalSignRootCA.der
    
  3. إذا تم التنفيذ في بيئة Java SE ، أضف الخيارات التالية:

    $ java -Djavax.net.ssl.trustStore=GlobalSignRootCA.jks -Djavax.net.ssl.trustStorePassword=trustStorePassword -jar MyJar.jar
    
  4. أو أضف ما يلي إلى رمز Java:

    System.setProperty("javax.net.ssl.trustStore", "GlobalSignRootCA.jks");
    System.setProperty("javax.net.ssl.trustStorePassword","trustStorePassword");
    

الخيار الآخر للخطوة 2 هو مجرد استخدام keytool يأمر. Bellow مثال على سلسلة من الشهادات:

$ keytool -import -file org.eu.crt -alias orgcrt -keystore globalsignrs.jks
$ keytool -import -file GlobalSignOrganizationValidationCA-SHA256-G2.crt -alias globalsignorgvalca -keystore globalsignrs.jks
$ keytool -import -file GlobalSignRootCA.crt -alias globalsignrootca -keystore globalsignrs.jks

إذا كنت بحاجة إلى طريقة سهلة لتحميل ملفات PEM في Java دون الحاجة إلى التعامل مع الأدوات الخارجية (Opensll ، KeyTool), ، إليك الكود الذي أستخدمه في الإنتاج:

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.ArrayList;
import java.util.List;

import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocketFactory;
import javax.xml.bind.DatatypeConverter;

public class PEMImporter {

    public static SSLServerSocketFactory createSSLFactory(File privateKeyPem, File certificatePem, String password) throws Exception {
        final SSLContext context = SSLContext.getInstance("TLS");
        final KeyStore keystore = createKeyStore(privateKeyPem, certificatePem, password);
        final KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
        kmf.init(keystore, password.toCharArray());
        final KeyManager[] km = kmf.getKeyManagers();
        context.init(km, null, null);
        return context.getServerSocketFactory();
    }

    /**
     * Create a KeyStore from standard PEM files
     * 
     * @param privateKeyPem the private key PEM file
     * @param certificatePem the certificate(s) PEM file
     * @param the password to set to protect the private key
     */
    public static KeyStore createKeyStore(File privateKeyPem, File certificatePem, final String password)
            throws Exception, KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
        final X509Certificate[] cert = createCertificates(certificatePem);
        final KeyStore keystore = KeyStore.getInstance("JKS");
        keystore.load(null);
        // Import private key
        final PrivateKey key = createPrivateKey(privateKeyPem);
        keystore.setKeyEntry(privateKeyPem.getName(), key, password.toCharArray(), cert);
        return keystore;
    }

    private static PrivateKey createPrivateKey(File privateKeyPem) throws Exception {
        final BufferedReader r = new BufferedReader(new FileReader(privateKeyPem));
        String s = r.readLine();
        if (s == null || !s.contains("BEGIN PRIVATE KEY")) {
            r.close();
            throw new IllegalArgumentException("No PRIVATE KEY found");
        }
        final StringBuilder b = new StringBuilder();
        s = "";
        while (s != null) {
            if (s.contains("END PRIVATE KEY")) {
                break;
            }
            b.append(s);
            s = r.readLine();
        }
        r.close();
        final String hexString = b.toString();
        final byte[] bytes = DatatypeConverter.parseBase64Binary(hexString);
        return generatePrivateKeyFromDER(bytes);
    }

    private static X509Certificate[] createCertificates(File certificatePem) throws Exception {
        final List<X509Certificate> result = new ArrayList<X509Certificate>();
        final BufferedReader r = new BufferedReader(new FileReader(certificatePem));
        String s = r.readLine();
        if (s == null || !s.contains("BEGIN CERTIFICATE")) {
            r.close();
            throw new IllegalArgumentException("No CERTIFICATE found");
        }
        StringBuilder b = new StringBuilder();
        while (s != null) {
            if (s.contains("END CERTIFICATE")) {
                String hexString = b.toString();
                final byte[] bytes = DatatypeConverter.parseBase64Binary(hexString);
                X509Certificate cert = generateCertificateFromDER(bytes);
                result.add(cert);
                b = new StringBuilder();
            } else {
                if (!s.startsWith("----")) {
                    b.append(s);
                }
            }
            s = r.readLine();
        }
        r.close();

        return result.toArray(new X509Certificate[result.size()]);
    }

    private static RSAPrivateKey generatePrivateKeyFromDER(byte[] keyBytes) throws InvalidKeySpecException, NoSuchAlgorithmException {
        final PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
        final KeyFactory factory = KeyFactory.getInstance("RSA");
        return (RSAPrivateKey) factory.generatePrivate(spec);
    }

    private static X509Certificate generateCertificateFromDER(byte[] certBytes) throws CertificateException {
        final CertificateFactory factory = CertificateFactory.getInstance("X.509");
        return (X509Certificate) factory.generateCertificate(new ByteArrayInputStream(certBytes));
    }

}

استمتع.

يحتاج أي بيان SELECT في كتلة PL / SQL لتحديد "Guardacodicetagretagde" بعض المتغيرات. giveacodicetagpre.

سيكون بناء جملة ساري المفعول.بالطبع، هذا الزناد لا يفعل أي شيء لكنني أفترض أن هذا شيء تخطط له على العنوان لاحقا.

الأقرب سيكون قادرا على الوصول إلى ذلك مع سير عمل OOTB هو إنشاء سير عمل يحتوي على معلمات بدء.عند بدء، سيطالب ذلك المستخدم بالمعلومات على نموذج بدء تشغيل سير العمل منفصل.يمكنك بعد ذلك دمج هذه المعلومات في البريد الإلكتروني الذي يتم إرساله.

حصلت عليه من الإنترنت. إنه يعمل جيدًا لملفات PEM التي تحتوي على إدخالات متعددة.

#!/bin/bash
pemToJks()
{
        # number of certs in the PEM file
        pemCerts=$1
        certPass=$2
        newCert=$(basename "$pemCerts")
        newCert="${newCert%%.*}"
        newCert="${newCert}"".JKS"
        ##echo $newCert $pemCerts $certPass
        CERTS=$(grep 'END CERTIFICATE' $pemCerts| wc -l)
        echo $CERTS
        # For every cert in the PEM file, extract it and import into the JKS keystore
        # awk command: step 1, if line is in the desired cert, print the line
        #              step 2, increment counter when last line of cert is found
        for N in $(seq 0 $(($CERTS - 1))); do
          ALIAS="${pemCerts%.*}-$N"
          cat $pemCerts |
                awk "n==$N { print }; /END CERTIFICATE/ { n++ }" |
                $KEYTOOLCMD -noprompt -import -trustcacerts \
                                -alias $ALIAS -keystore $newCert -storepass $certPass
        done
}
pemToJks <pem to import> <pass for new jks>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top