কীভাবে পিকেসিএস # 12- এ প্রাইভেট কীতে বৈশিষ্ট্যগুলি সেট করবেন (কী ব্যবহার)


1

আমি জাভাতে লাইব্রেরী বাউন্সি ক্যাসল সহ একটি শংসাপত্র X509 তৈরি করি। আমার ব্যক্তিগত কীতে একটি কী অ্যাট্রিবিউট সেট করা দরকার।

PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 1024
Bag Attributes
    friendlyName: ASDF
    localKeyID: XX XX XX XX
    Microsoft CSP Name: Microsoft Software Key Storage Provider  <--- (1)
Key Attributes: <No Attributes>    <--- put HERE X509v3 Key Usage: 80
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----

আমার কী ব্যবহারটি 80 -> X509v3 কী ব্যবহার করতে হবে: 80. কারণ আমি এলিপটিক বক্ররেখা এবং উইন্ডোজ ম্যাকুইনের সাথে কাজ করি যদি সেই বৈশিষ্ট্যগুলি না থাকে তবে পুনরায় রিকনয়েজ করা যায় না।

আমি চেষ্টা করেছিলাম:

X509v3CertificateBuilder builder =  new JcaX509v3CertificateBuilder(
                issuerDNName, 
                serial,
                startDate, 
                endDate, 
                tX500Name, 
                pubKey);

X509KeyUsage usage = new X509KeyUsage(X509KeyUsage.digitalSignature); 
builder.addExtension(Extension.keyUsage, false, usage); 

অথবা

builder.addExtension(
                new ASN1ObjectIdentifier("2.5.29.15"),
                true,
                new X509KeyUsage(
                   X509KeyUsage.digitalSignature));

কেউ কাজ করে না আমি একটি ব্যাগ অ্যাট্রিবিউট (1) সেট করতে পারি তাই:

PKCS12BagAttributeCarrier bagAttr = (PKCS12BagAttributeCarrier)privateKey;//pbeWithSHA1And3-KeyTripleDES-CBC
        bagAttr.setBagAttribute(
                MicrosoftObjectIdentifiers.microsoft.branch("17").branch("1"),// this OID corresponds to: 1.3.6.1.4.1.311.17.1
                new DERBMPString("Microsoft Software Key Storage Provider"));

একটি প্রাইভেটকিআইনফো ক্লাস বিদ্যমান তবে এটি কীভাবে ব্যবহার করব তা আমি জানি না।

আমি যদি ওপেনসেল দিয়ে তৈরি করি তবে আমার পুট- কিসিগ বিকল্পটি দরকার ।

openssl pkcs12 -export -in newcert.pem -inkey newreq.pem -name "MY CERTIFICATE" -certfile demoCA/cacert.pem -out mycert.p12 -keysig

ওপেনএসএসএল ডক্স

-keyex | -keysig নির্দিষ্ট করে ব্যক্তিগত কী কী এক্সচেঞ্জ বা শুধু সাইন ইন করার জন্য ব্যবহার করা যেতে পারে। এই বিকল্পটি কেবল এমএসআইই এবং অনুরূপ এমএস সফ্টওয়্যার দ্বারা ব্যাখ্যা করা হয়েছে। সাধারণত "রফতানি গ্রেড" সফ্টওয়্যারটি কেবল 512 বিট আরএসএ কীগুলি এনক্রিপশন উদ্দেশ্যে ব্যবহৃত হতে পারে তবে স্বাক্ষরের জন্য নির্ধারিত দৈর্ঘ্যের কীগুলিকে অনুমতি দেয়। -Keysig বিকল্পটি কেবল স্বাক্ষর করার জন্য কী চিহ্নিত করে। কেবলমাত্র সাইন ইন কী S / MIME সাইন ইন, অ্যান্টিথোড (অ্যাকটিভএক্স নিয়ন্ত্রণ স্বাক্ষর) এবং এসএসএল ক্লায়েন্ট প্রমাণীকরণের জন্য ব্যবহৃত হতে পারে তবে কেবলমাত্র MSIE 5.0 বাগের কারণে এবং পরে এসএসএল ক্লায়েন্ট প্রমাণীকরণের জন্য কেবল কীগুলিতে স্বাক্ষর করার জন্য সমর্থন করে।

ফলাফল:

PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Bag Attributes
    localKeyID: XX XX XX XX
    friendlyName: ASDF
    Microsoft CSP Name: ECDSA_P256#Microsoft Software key Service Provider
Key Attributes
    X509v3 Key Usage: 80     <-- This
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----

ধন্যবাদ!

উত্তর:


1

মূল বৈশিষ্ট্য সহ সামান্য পরিবর্তিত pkcs12 ক্রিয়েশন কোডটি নীচে দেওয়া হয়েছে।

private static void createPKCS12File(String alias, PrivateKey key,
X509Certificate cert, char[] password, OutputStream pfxOut)
throws Exception
{
    PrivateKeyInfo pki = PrivateKeyInfo.getInstance(key.getEncoded());
    X509KeyUsage usage = new X509KeyUsage(X509KeyUsage.digitalSignature);
    DERSet usageSet = new DERSet(usage);
    DERSequence attrib = new DERSequence(new ASN1Encodable[]
        {new ASN1ObjectIdentifier("2.5.29.15"), usageSet});
    pki = new PrivateKeyInfo(pki.getPrivateKeyAlgorithm(),
        pki.parsePrivateKey(), new DLSet(attrib));

    OutputEncryptor encOut = new JcePKCSPBEOutputEncryptorBuilder(
        NISTObjectIdentifiers.id_aes256_CBC).setProvider("BC").build(
        password);
    PKCS12SafeBagBuilder certBuilder = new JcaPKCS12SafeBagBuilder(
        cert);
    certBuilder.addBagAttribute(
        PKCS12SafeBag.friendlyNameAttribute, new DERBMPString(alias));

    JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils();
    SubjectKeyIdentifier pubKeyId = extUtils.createSubjectKeyIdentifier(
        cert.getPublicKey());
    certBuilder.addBagAttribute(PKCS12SafeBag.localKeyIdAttribute,
        pubKeyId);
    PKCS12SafeBagBuilder keyBagBuilder = new PKCS12SafeBagBuilder(pki,
        encOut);
    keyBagBuilder.addBagAttribute(PKCS12SafeBag.friendlyNameAttribute,
        new DERBMPString(alias));
    keyBagBuilder.addBagAttribute(PKCS12SafeBag.localKeyIdAttribute,
        pubKeyId);
    keyBagBuilder.addBagAttribute(new ASN1ObjectIdentifier(
        "1.3.6.1.4.1.311.17.1"),
        new DERBMPString("Microsoft Software Key Storage Provider"));
    PKCS12PfxPduBuilder builder = new PKCS12PfxPduBuilder();
    builder.addData(keyBagBuilder.build());
    builder.addEncryptedData(new JcePKCSPBEOutputEncryptorBuilder(
        PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC2_CBC).
        setProvider("BC").build(password),
        new PKCS12SafeBag[]{certBuilder.build()});
    PKCS12PfxPdu pfx = builder.build(new JcePKCS12MacCalculatorBuilder(
        NISTObjectIdentifiers.id_sha256), password);
    pfxOut.write(pfx.getEncoded(ASN1Encoding.DL));
    pfxOut.flush();
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.