简体   繁体   English

如何在 Java 代码中使用两个条形“//”? [等候接听]

[英]How do I use two bar “//” in a Java Code? [on hold]

I'm trying to access an SSL certificate on a JAVA Class, however I'm getting the following error:我正在尝试访问 JAVA Class 上的 SSL 证书,但是我收到以下错误:

Exception in thread "main" java.io.FileNotFoundException: ssl:/a.us-east.amazonaws.com:666 (No such file or directory)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112)

The problem is that I'm putting the URL in a String Variable:问题是我将 URL 放在字符串变量中:

import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.bouncycastle.cert.jcajce.JcaCertStore;
import org.bouncycastle.cms.CMSProcessableByteArray;
import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.cms.CMSSignedDataGenerator;
import org.bouncycastle.cms.CMSTypedData;
import org.bouncycastle.cms.jcajce.JcaSignerInfoGeneratorBuilder;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.operator.ContentSigner;
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder;
import org.bouncycastle.util.Store;
import org.bouncycastle.util.encoders.Base64;

public final class PKCS7 {

    private static final String PATH_TO_KEYSTORE = "ssl://a.us-east.amazonaws.com:666";
    private static final String KEYSTORE_PASSWORD = "123";
    private static final String USER_NAME = "anyone";
    private static final String SIGNATUREALGO = "Sha256WithRSA";
    private static final String URI_REGISTRO = "https://master-key";

    public static void main(String[] args) throws Exception {
    PKCS7 signer = new PKCS7();
    KeyStore keyStore = signer.loadKeyStore();
    CMSSignedDataGenerator signatureGenerator = signer.setUpProvider(keyStore);

    // Json de teste...
    String json = "";

    byte[] signedBytes = signer.signPkcs7(json.getBytes("UTF-8"), signatureGenerator);
    System.out.println("Signed Encoded Bytes: " + new String(Base64.encode(signedBytes)));

    HttpEntity entity = new StringEntity(new String(Base64.encode(signedBytes)), Charset.forName("UTF-8"));
    HttpPost post = new HttpPost(URI_REGISTRO);
    post.setEntity(entity);

    HttpClientBuilder builder = HttpClientBuilder.create();
    HttpResponse response = builder.build().execute(post);

    System.out.println(response.getStatusLine());
    System.out.println(EntityUtils.toString(response.getEntity(), "UTF-8"));
    }

    private KeyStore loadKeyStore() throws Exception {
    KeyStore keystore = KeyStore.getInstance("JKS");

    InputStream is = new FileInputStream(PATH_TO_KEYSTORE);
    keystore.load(is, KEYSTORE_PASSWORD.toCharArray());
    return keystore;
    }

    private CMSSignedDataGenerator setUpProvider(final KeyStore keystore) throws Exception {
    Security.addProvider(new BouncyCastleProvider());

    Enumeration<String> aliases = keystore.aliases();
    String aliaz = "";
    while (aliases.hasMoreElements()) {
        aliaz = aliases.nextElement();
        if (keystore.isKeyEntry(aliaz)) {
        break;
        }
    }

    Certificate[] certchain = (Certificate[]) keystore.getCertificateChain(aliaz);

    final List<Certificate> certlist = new ArrayList<Certificate>();

    for (int i = 0, length = certchain == null ? 0 : certchain.length; i < length; i++) {
        certlist.add(certchain[i]);
    }

    Store certstore = new JcaCertStore(certlist);

    Certificate cert = keystore.getCertificate(aliaz);

    ContentSigner signer = new JcaContentSignerBuilder(SIGNATUREALGO).setProvider("BC")
        .build((PrivateKey) (keystore.getKey(aliaz, KEYSTORE_PASSWORD.toCharArray())));

    CMSSignedDataGenerator generator = new CMSSignedDataGenerator();

    generator.addSignerInfoGenerator(
        new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().setProvider("BC").build())
            .build(signer, (X509Certificate) cert));

    generator.addCertificates(certstore);

    return generator;
    }

    private byte[] signPkcs7(final byte[] content, final CMSSignedDataGenerator generator) throws Exception {
    CMSTypedData cmsdata = new CMSProcessableByteArray(content);
    CMSSignedData signeddata = generator.generate(cmsdata, true);
    return signeddata.getEncoded();
    }

}

For test, just need to use:对于测试,只需要使用:

System.out.println(PATH_TO_KEYSTORE);

How do I use two bar // in a Java Code?如何在 Java 代码中使用两个条形//

I'm using linux Ubuntu.我正在使用 linux Ubuntu。

If you want to use one slash / you need to write into your string value如果你想使用一个斜线/你需要写入你的字符串值

  • Two slashes "\\" or两个斜杠"\\"
  • One backslash "/"一个反斜杠"/"

So in your case所以在你的情况下
If you need double slashes into your string value, you will be requested to do:如果您需要在字符串值中添加双斜杠,您将被要求执行以下操作:

private static final String PATH_TO_KEYSTORE = "ssl:////anything:666";

It is about using backslash to escape.这是关于使用反斜杠转义。

Maybe try:也许尝试:

String str = "\/\/some string";

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM