标签: bouncycastle

使用 Bouncy Castle 在 Java 中复制“openssl smime”?

我手上有个问题。我不懂 Java 的同事正在使用 OpenSSL 命令对文件进行签名,如下所示:

openssl smime -binary -sign -certfile WWDR.pem -signer passcertificate.pem \
  -inkey passkey.pem -in manifest.json -out signature -outform DER \
  -passin pass:12345
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这里有三个文件提供给 openssl 命令来生成签名。

现在我们想使用 Java 复制相同的功能,因为我们假设要签名的内容将是动态的并且本质上是服务器端的。我读到 BouncyCastle 是最佳选择。但我不确定如何使用该库。我对密码技术也不是很熟悉。我无法理解如何使用上面的所有三个文件来签署manifest.json.

如果有人可以引导我找到正确的代码或给我一个开始,我将非常感谢您的努力。

java cryptography bouncycastle code-signing-certificate

3
推荐指数
1
解决办法
2297
查看次数

tomcat 类加载器错误?

更新:我已经了解了更多有关正在发生的事情并在底部添加了新信息。

我有 2 个应用程序在 tomcat 下运行。首先加载 App1,然后加载 App2。如果 App1 在启动过程中遇到任何类型的错误并且无法成功加载,我会在 App2 启动过程中收到此错误:

Caused by: java.security.NoSuchAlgorithmException: No such algorithm: RSA/NONE/OAEPWithSHA1AndMGF1Padding
    at javax.crypto.Cipher.getInstance(DashoA13*..)
    at javax.crypto.Cipher.getInstance(DashoA13*..)
    at com.jp.protection.security.BouncyCastleSecurityProvider.getCipher(BouncyCastleSecurityProvider.java:139)
    at com.jp.protection.security.BouncyCastleSecurityProvider.decode(BouncyCastleSecurityProvider.java:110)
    ... 70 more
Caused by: java.lang.NullPointerException
    at org.bouncycastle.jcajce.provider.util.DigestFactory.getDigest(DigestFactory.java:86)
    at org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.initFromSpec(CipherSpi.java:83)
    at org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineSetPadding(CipherSpi.java:214)
    at javax.crypto.Cipher$r.a(DashoA13*..)
    ... 74 more
Run Code Online (Sandbox Code Playgroud)

请注意,最终原因是 NullPointerException。我下载了 DigestFactory 的源代码,它看起来像这样(只是摘录了相关部分):

package org.bouncycastle.jcajce.provider.util;

public class DigestFactory
{
    private static Set sha1 = new HashSet();

    static
    {           
        sha1.add("SHA1");
        sha1.add("SHA-1");
    }

    public static Digest getDigest(
        String digestName) 
    {
        digestName = Strings.toUpperCase(digestName);

        if (sha1.contains(digestName))  ** line …
Run Code Online (Sandbox Code Playgroud)

java tomcat bouncycastle

3
推荐指数
1
解决办法
8598
查看次数

如何在 Android 中以编程方式生成自签名证书并将其用于 https 服务器

我需要在 Android 应用程序中动态创建 SSL 自签名证书,并能够从同一应用程序中的 https 服务器使用它。我发现这段代码可以创建一个证书,尽管我不确定它是正确的证书类型。我还没有找到太多关于如何将其添加到我的应用程序上的 BouncyCastle 密钥库以及如何在创建 HTTPs 服务器时使用它的信息。有人可以给我指出一个执行此操作的示例吗?谢谢。

static X509Certificate generateSelfSignedX509Certificate() throws Exception {

        // yesterday
        Date validityBeginDate = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000);
        // in 2 years
        Date validityEndDate = new Date(System.currentTimeMillis() + 2 * 365 * 24 * 60 * 60 * 1000);

        // GENERATE THE PUBLIC/PRIVATE RSA KEY PAIR
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC");
        keyPairGenerator.initialize(1024, new SecureRandom());

        KeyPair keyPair = keyPairGenerator.generateKeyPair();

        // GENERATE THE X509 CERTIFICATE
        X509V3CertificateGenerator certGen = …
Run Code Online (Sandbox Code Playgroud)

android bouncycastle

3
推荐指数
1
解决办法
9022
查看次数

BouncyCastle C# PublicKey 与 GnuPG 不同

我正在尝试从 GnuPG 使用 BouncyCastle C# 库创建的密钥环获取公共 PGP 密钥。我已经使用以下代码使其半工作。问题是它输出的公钥长度大约是真实公钥的一半,而且最后几个字节也不同。我只是想得到真正的钥匙。

更新:值得注意的是,我生成的密钥环只有一个公钥,但我从 bouncycastle 中得到了两个。我还发现,如果将第二个密钥插入到从末尾开始的前几个字符中,它会生成几乎原始的密钥。只有末尾的几个字符不同。那么为什么有两个钥匙,为什么会发生这种情况呢?我缺少什么?

GnuPG 密钥环不兼容吗?

另请注意,此处显示的代码仅获取最后一个密钥。我现在将每个添加到列表中。

这是我的代码:

public static string ReadKey(string pubkeyFile)
{
    string theKey;
    Stream fs = File.OpenRead(pubkeyFile);

    //
    // Read the public key rings
    //
    PgpPublicKeyRingBundle pubRings = new PgpPublicKeyRingBundle(PgpUtilities.GetDecoderStream(fs));
    fs.Close();

    foreach (PgpPublicKeyRing pgpPub in pubRings.GetKeyRings())
    {
        pgpPub.GetPublicKey();

        foreach (PgpPublicKey pgpKey in pgpPub.GetPublicKeys())
        {
            //AsymmetricKeyParameter pubKey = pgpKey.GetKey();
            //SubjectPublicKeyInfo k = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pubKey);
            //byte[] keyData = k.ToAsn1Object().GetDerEncoded();
            //byte[] keyData = k.GetEncoded();
            byte[] keyData = pgpKey.GetEncoded();
            theKey = Convert.ToBase64String(keyData);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c# encryption bouncycastle pgp openpgp

3
推荐指数
1
解决办法
3670
查看次数

Java 将密钥保存到密钥库 KeyStoreException

我尝试生成 RSA CA 密钥对和证书并将其保存到密钥库。我的代码是:

import java.io.FileOutputStream;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.KeyStore;
import java.security.SecureRandom;
import java.security.Security;
import java.security.cert.X509Certificate;
import java.util.Date;

import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.cert.X509CertificateHolder;
import org.bouncycastle.cert.X509v3CertificateBuilder;
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.operator.ContentSigner;
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;

    private static final  String storeType = "PKCS12";
        private static final  String storePassword = "password";
        private static final  String storePath = "/usr/lib/java/keystore.ks";
        private static final Date startDate = new Date(System.currentTimeMillis());                                         // time from which certificate is valid
        private static final Date expiryDate = …
Run Code Online (Sandbox Code Playgroud)

java bouncycastle keystore

3
推荐指数
1
解决办法
6371
查看次数

BouncyCastle NoSuchProviderException 即使它是 Maven 依赖项

我正在尝试使用 Wildfly Swarm 构建一个现有的 JavaEE 项目,但我的一个库中不断遇到问题。它应该从服务器加载 PEM 格式的公钥并用它来验证签名。然而,我不断得到这个:

2017-06-08 20:55:59,229 ERROR [stderr] (default task-3) java.security.NoSuchProviderException: no such provider: BC
2017-06-08 20:55:59,234 ERROR [stderr] (default task-3)     at sun.security.jca.GetInstance.getService(GetInstance.java:83)
2017-06-08 20:55:59,238 ERROR [stderr] (default task-3)     at sun.security.jca.GetInstance.getInstance(GetInstance.java:206)
2017-06-08 20:55:59,238 ERROR [stderr] (default task-3)     at java.security.KeyFactory.getInstance(KeyFactory.java:211)
2017-06-08 20:55:59,239 ERROR [stderr] (default task-3)     at enterprises.mccollum.wmapp.ssauthclient.PublicKeySingleton.loadPubKey(PublicKeySingleton.java:83)
2017-06-08 20:55:59,239 ERROR [stderr] (default task-3)     at enterprises.mccollum.wmapp.ssauthclient.PublicKeySingleton.init(PublicKeySingleton.java:57)
Run Code Online (Sandbox Code Playgroud)

导致问题的代码在这里:

PublicKeySingleton.java snippet:
81:    PemObject pemPubKey = ldPemFromServer();
82:    if(pemPubKey != null){
83:    KeyFactory kf = KeyFactory.getInstance("RSA", BouncyCastleProvider.PROVIDER_NAME);
84:    PublicKey lPubKey …
Run Code Online (Sandbox Code Playgroud)

java bouncycastle maven wildfly-swarm

3
推荐指数
1
解决办法
6352
查看次数

如何从 X509Certificate 对象解析 AuthoritiyInformation

我想从给定X509Certificate对象检索 OCSP 信息。由于我不知道如何解析这些信息,所以我在这里问这个问题。

这是我到目前为止得到的:

X509Certificate x509cert = ... //The Certificate
ASN1Primitive obj = ASN1Primitive.fromByteArray(x509cert
                            .getExtensionValue(Extension.authorityInfoAccess
                                    .getId()));
AuthorityInformationAccess aia = AuthorityInformationAccess.getInstance(obj);
Run Code Online (Sandbox Code Playgroud)

抛出异常:

java.security.cert.CertificateParsingException: java.lang.IllegalArgumentException: unknown object in getInstance: org.bouncycastle.asn1.DEROctetString
Run Code Online (Sandbox Code Playgroud)

如何将 a 解析ASN1Primitive为有效DEROctetString的进度?

ASN1Primitive示例中的值为:

3032303006082b060105050730018624687474703a2f2f6f6373702e616368656c6f732e64653a383038302f6f6373702f65676b
Run Code Online (Sandbox Code Playgroud)

在我看来这是一个有效的值。

java bouncycastle x509certificate

3
推荐指数
1
解决办法
2718
查看次数

keytool 和 java keystore.aliases() 之间的 .pfx 文件或 .p12 文件别名不匹配

我正在尝试使用 pfx/p12 文件获取别名

keytool -v -list -storetype pkcs12 -keystore servercert.p12 -storepass 1234

这给了我

Keystore type: PKCS12
Keystore provider: SunJSSE

Your keystore contains 1 entry

Alias name: 1
Creation date: Jul 4, 2017
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=CSIT CA, O="CSIT CA,Ltd.", L=Dhaka, ST=Dhaka, C=BD
Issuer: EMAILADDRESS=csit@csit.com, CN=CSIT CA, OU=Software Department, O=CSIT CA, L=Dhaka, ST=Dhaka, C=BD
Serial number: 1
Valid from: Tue Jul 04 15:41:40 BDT 2017 until: Mon Mar 30 15:41:40 BDT 2020
Certificate fingerprints:
     MD5: …
Run Code Online (Sandbox Code Playgroud)

java ssl bouncycastle ca ssl-certificate

3
推荐指数
1
解决办法
7708
查看次数

使用 BouncyCastle 库的 Argon2 示例

从 1.61 版本开始,BouncyCastle 库支持基于 Argon2 密码的密钥派生功能。但是,我找不到如何通过 BouncyCastle API 使用 Argon2 算法的示例。有人可以给个提示吗?多谢。

passwords cryptography bouncycastle argon2-ffi

3
推荐指数
1
解决办法
5144
查看次数

Lucee 上的 JAR 未找到 BouncyCastleProvider

我们amazon-pay-api-sdk-java-2.2.2.jar在 Adob​​e ColdFusion中成功地使用了 AmazonPay API for Java ( )。我们最近引入了 Lucee(在 Jetty 上,也在 OpenJDK 8 上运行)并尝试运行相同的代码(相关摘录):

payConfig = createObject("java", "com.amazon.pay.api.PayConfiguration").init();
payConfig.setPrivateKey("...");
Run Code Online (Sandbox Code Playgroud)

但是,在调用 时setPrivateKey,它将到达Security.addProvider(new BouncyCastleProvider());through PayConfiguration,我们收到一个java.lang.ClassNotFoundException

lucee.runtime.exp.NativeException: org.bouncycastle.jce.provider.BouncyCastleProvider
  at com.amazon.pay.api.PayConfiguration.setPrivateKey(PayConfiguration.java:77)
  [...]
  at java.lang.Thread.run(Thread.java:823)
 Caused by: java.lang.NoClassDefFoundError: org.bouncycastle.jce.provider.BouncyCastleProvider
  ... 57 more
 Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider not found by amazon.pay.api.sdk.java.2.2.2 [49]
  at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1597)
  at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
  at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:881)
  ... 57 more
Run Code Online (Sandbox Code Playgroud)

我们已将所有依赖项(即bcprov-jdk15on-1.65.jarBouncyCastle)放在/lucee-server/context/lib. BouncyCastleProvider在 .cfm/.cfc 中创建确实按预期工作:
createObject("java", "org.bouncycastle.jce.provider.BouncyCastleProvider").init()

我不明白 Lucee …

java coldfusion bouncycastle apache-felix lucee

3
推荐指数
1
解决办法
145
查看次数