SSL에서 사용할 Java Keystore에서 기존 X.509 인증서 및 개인 키를 가져 오는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/906402

  •  05-09-2019
  •  | 
  •  

문제

activeemq 구성으로 이걸 가지고 있습니다.

<sslContext>
        <sslContext keyStore="file:/home/alex/work/amq/broker.ks"  
 keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts" 
 trustStorePassword="password"/>
</sslContext>

X.509 인증서와 키 파일이 있습니다.

SSL 및 SSL+Stomp 커넥터에서 사용하려면 두 가지를 어떻게 가져 오려면? Google이 항상 키 자체를 생성 할 수있는 모든 예제이지만 이미 키가 있습니다.

나는 시도했다

keytool -import  -keystore ./broker.ks -file mycert.crt

그러나 이것은 키 파일이 아니라 인증서 만 가져와

2009-05-25 13:16:24,270 [localhost:61612] ERROR TransportConnector - Could not accept connection : No available certificate or key corresponds to the SSL cipher suites which are enabled.

인증서와 키를 연결하려고 시도했지만 동일한 결과를 얻었습니다.

키를 어떻게 가져 오나요?

도움이 되었습니까?

해결책

믿거 나 말거나 KeyTool은 개인 키를 Keystore로 가져 오는 것과 같은 기본 기능을 제공하지 않습니다. 당신은 이것을 시도 할 수 있습니다 해결 방법 PKSC12 파일을 개인 키로 KeyStore로 병합합니다.

또는보다 사용자 친화적 인 사용 만 사용하십시오 키맨 keytool.exe 대신 Keystore 처리 용 IBM에서

다른 팁

다른 답변에 링크 된 주석/게시물에서 찾은 다음 두 단계를 사용했습니다.

1 단계 : X.509 인증서 및 키를 PKCS12 파일로 변환

openssl pkcs12 -export -in server.crt -inkey server.key \
               -out server.p12 -name [some-alias] \
               -CAfile ca.crt -caname root

메모: PKCS12 파일에 비밀번호를 넣으십시오. 그렇지 않으면 가져 오려고 할 때 NULL 포인터 예외가 나타납니다. (다른 사람 이이 두통이있는 경우). (감사합니다 Jocull!)

노트 2: 추가하고 싶을 수도 있습니다 -chain 전체 인증서 체인을 보존하는 옵션. (감사합니다 Mafuba)

2 단계 : PKCS12 파일을 Java Keystore로 변환

keytool -importkeystore \
        -deststorepass [changeit] -destkeypass [changeit] -destkeystore server.keystore \
        -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass some-password \
        -alias [some-alias]

완성된

선택적 단계 0 : 자체 서명 된 인증서를 만듭니다

openssl genrsa -out server.key 2048
openssl req -new -out server.csr -key server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

건배!

Java 6의 KeyTool에는이 기능이 있습니다. KeyTool을 사용하여 개인 키를 Java Keystore로 가져옵니다

다음은 해당 게시물의 기본 세부 사항입니다.

  1. OpenSSL을 사용하여 기존 인증서를 PKCS12로 변환하십시오. 요청하면 비밀번호가 필요하거나 두 번째 단계가 불평합니다.

    openssl pkcs12 -export -in [my_certificate.crt] -inkey [my_key.key] -out [keystore.p12] -name [new_alias] -CAfile [my_ca_bundle.crt] -caname root
    
  2. PKCS12를 Java Keystore 파일로 변환하십시오.

    keytool -importkeystore -deststorepass [new_keystore_pass] -destkeypass [new_key_pass] -destkeystore [keystore.jks] -srckeystore [keystore.p12] -srcstoretype PKCS12 -srcstorepass [pass_used_in_p12_keystore] -alias [alias_used_in_p12_keystore]
    

그리고 하나 더 :

#!/bin/bash

# We have:
#
# 1) $KEY : Secret key in PEM format ("-----BEGIN RSA PRIVATE KEY-----") 
# 2) $LEAFCERT : Certificate for secret key obtained from some
#    certification outfit, also in PEM format ("-----BEGIN CERTIFICATE-----")   
# 3) $CHAINCERT : Intermediate certificate linking $LEAFCERT to a trusted
#    Self-Signed Root CA Certificate 
#
# We want to create a fresh Java "keystore" $TARGET_KEYSTORE with the
# password $TARGET_STOREPW, to be used by Tomcat for HTTPS Connector.
#
# The keystore must contain: $KEY, $LEAFCERT, $CHAINCERT
# The Self-Signed Root CA Certificate is obtained by Tomcat from the
# JDK's truststore in /etc/pki/java/cacerts

# The non-APR HTTPS connector (APR uses OpenSSL-like configuration, much
# easier than this) in server.xml looks like this 
# (See: https://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html):
#
#  <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
#                SSLEnabled="true"
#                maxThreads="150" scheme="https" secure="true"
#                clientAuth="false" sslProtocol="TLS"
#                keystoreFile="/etc/tomcat6/etl-web.keystore.jks"
#                keystorePass="changeit" />
#

# Let's roll:    

TARGET_KEYSTORE=/etc/tomcat6/foo-server.keystore.jks
TARGET_STOREPW=changeit

TLS=/etc/pki/tls

KEY=$TLS/private/httpd/foo-server.example.com.key
LEAFCERT=$TLS/certs/httpd/foo-server.example.com.pem
CHAINCERT=$TLS/certs/httpd/chain.cert.pem

# ----
# Create PKCS#12 file to import using keytool later
# ----

# From https://www.sslshopper.com/ssl-converter.html:
# The PKCS#12 or PFX format is a binary format for storing the server certificate,
# any intermediate certificates, and the private key in one encryptable file. PFX
# files usually have extensions such as .pfx and .p12. PFX files are typically used 
# on Windows machines to import and export certificates and private keys.

TMPPW=$$ # Some random password

PKCS12FILE=`mktemp`

if [[ $? != 0 ]]; then
  echo "Creation of temporary PKCS12 file failed -- exiting" >&2; exit 1
fi

TRANSITFILE=`mktemp`

if [[ $? != 0 ]]; then
  echo "Creation of temporary transit file failed -- exiting" >&2; exit 1
fi

cat "$KEY" "$LEAFCERT" > "$TRANSITFILE"

openssl pkcs12 -export -passout "pass:$TMPPW" -in "$TRANSITFILE" -name etl-web > "$PKCS12FILE"

/bin/rm "$TRANSITFILE"

# Print out result for fun! Bug in doc (I think): "-pass " arg does not work, need "-passin"

openssl pkcs12 -passin "pass:$TMPPW" -passout "pass:$TMPPW" -in "$PKCS12FILE" -info

# ----
# Import contents of PKCS12FILE into a Java keystore. WTF, Sun, what were you thinking?
# ----

if [[ -f "$TARGET_KEYSTORE" ]]; then
  /bin/rm "$TARGET_KEYSTORE"
fi

keytool -importkeystore \
   -deststorepass  "$TARGET_STOREPW" \
   -destkeypass    "$TARGET_STOREPW" \
   -destkeystore   "$TARGET_KEYSTORE" \
   -srckeystore    "$PKCS12FILE" \
   -srcstoretype  PKCS12 \
   -srcstorepass  "$TMPPW" \
   -alias foo-the-server

/bin/rm "$PKCS12FILE"

# ----
# Import the chain certificate. This works empirically, it is not at all clear from the doc whether this is correct
# ----

echo "Importing chain"

TT=-trustcacerts

keytool -import $TT -storepass "$TARGET_STOREPW" -file "$CHAINCERT" -keystore "$TARGET_KEYSTORE" -alias chain

# ----
# Print contents
# ----

echo "Listing result"

keytool -list -storepass "$TARGET_STOREPW" -keystore "$TARGET_KEYSTORE"

예, KeyTool이 개인 키를 가져올 기능이 없다는 것은 슬픈 사실입니다.

기록을 위해, 마지막에 나는 설명 된 솔루션과 함께 갔다. 여기

먼저 P12로 변환 :

openssl pkcs12 -export -in [filename-certificate] -inkey [filename-key] -name [host] -out [filename-new-PKCS-12.p12]

P12에서 새 JKS 생성 :

keytool -importkeystore -deststorepass [password] -destkeystore [filename-new-keystore.jks] -srckeystore [filename-new-PKCS-12.p12] -srcstoretype PKCS12

제 경우에는 상호 SSL 인증에 사용될 두 개의 인증서와 암호화 된 개인 키가 포함 된 PEM 파일이있었습니다. 그래서 내 pem 파일은 다음과 같습니다.

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,C8BF220FC76AA5F9
...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

여기에 내가 한 일은 다음과 같습니다.

파일을 세 개의 개별 파일로 나누면 "--- 시작 .."로 시작하여 "--- end .."로 끝나는 하나의 항목 만 포함합니다. 이제 세 가지 파일이 있다고 가정하겠습니다 : cert1.pem cert2.pem 및 pkey.pem

OpenSSL 및 다음 구문을 사용하여 pkey.pem을 DER 형식으로 변환합니다.

openssl pkcs8 -topk8 -nocrypt -in pkey.pem -inform PEM -out pkey.der -outform DER

개인 키가 암호화되면 DER 형식으로 변환하려면 비밀번호를 공급해야합니다 (원래 PEM 파일의 공급 업체로부터 얻음). OpenSSL은 다음과 같은 비밀번호를 요청합니다. .PEM : "변환이 성공하면"pkey.der "라는 새 파일을 얻게됩니다.

새 Java 키 스토어를 만들고 개인 키와 인증서를 가져 오십시오.

String keypass = "password";  // this is a new password, you need to come up with to protect your java key store file
String defaultalias = "importkey";
KeyStore ks = KeyStore.getInstance("JKS", "SUN");

// this section does not make much sense to me, 
// but I will leave it intact as this is how it was in the original example I found on internet:   
ks.load( null, keypass.toCharArray());
ks.store( new FileOutputStream ( "mykeystore"  ), keypass.toCharArray());
ks.load( new FileInputStream ( "mykeystore" ),    keypass.toCharArray());
// end of section..


// read the key file from disk and create a PrivateKey

FileInputStream fis = new FileInputStream("pkey.der");
DataInputStream dis = new DataInputStream(fis);
byte[] bytes = new byte[dis.available()];
dis.readFully(bytes);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);

byte[] key = new byte[bais.available()];
KeyFactory kf = KeyFactory.getInstance("RSA");
bais.read(key, 0, bais.available());
bais.close();

PKCS8EncodedKeySpec keysp = new PKCS8EncodedKeySpec ( key );
PrivateKey ff = kf.generatePrivate (keysp);


// read the certificates from the files and load them into the key store:

Collection  col_crt1 = CertificateFactory.getInstance("X509").generateCertificates(new FileInputStream("cert1.pem"));
Collection  col_crt2 = CertificateFactory.getInstance("X509").generateCertificates(new FileInputStream("cert2.pem"));

Certificate crt1 = (Certificate) col_crt1.iterator().next();
Certificate crt2 = (Certificate) col_crt2.iterator().next();
Certificate[] chain = new Certificate[] { crt1, crt2 };

String alias1 = ((X509Certificate) crt1).getSubjectX500Principal().getName();
String alias2 = ((X509Certificate) crt2).getSubjectX500Principal().getName();

ks.setCertificateEntry(alias1, crt1);
ks.setCertificateEntry(alias2, crt2);

// store the private key
ks.setKeyEntry(defaultalias, ff, keypass.toCharArray(), chain );

// save the key store to a file         
ks.store(new FileOutputStream ( "mykeystore" ),keypass.toCharArray());

(선택 사항) 새 키 스토어의 내용을 확인하십시오.

keytool -list -keystore mykeystore -storepass password

Keystore 유형 : JKS Keystore 제공 업체 : Sun

Keystore에는 3 개의 항목이 포함되어 있습니다

CN = ..., OU = ..., O = .., 2014 년 9 월 2 일, 신뢰할 수있는 인증서 지문 (SHA1) : 2C : B8 : ...

Importkey, 2014 년 9 월 2 일, PrivateKeyentry, 인증 지문 (SHA1) : 9C : B0 : ...

CN = ..., O = ...., 2014 년 9 월 2 일, 신뢰할 수있는 Certentry, 인증 지문 (SHA1) : 83:63 : ...

(선택 사항) SSL 서버에 대한 새 키 스토어에서 인증서와 개인 키를 테스트하십시오. (VM 옵션으로 디버깅을 활성화 할 수 있습니다 : -djavax.net.debug = all)

        char[] passw = "password".toCharArray();
        KeyStore ks = KeyStore.getInstance("JKS", "SUN");
        ks.load(new FileInputStream ( "mykeystore" ), passw );

        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
        kmf.init(ks, passw);

        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);
        TrustManager[] tm = tmf.getTrustManagers();

        SSLContext sclx = SSLContext.getInstance("TLS");
        sclx.init( kmf.getKeyManagers(), tm, null);

        SSLSocketFactory factory = sclx.getSocketFactory();
        SSLSocket socket = (SSLSocket) factory.createSocket( "192.168.1.111", 443 );
        socket.startHandshake();

        //if no exceptions are thrown in the startHandshake method, then everything is fine..

마지막으로 사용 계획이라면 httpsurlconnection으로 인증서를 등록하십시오.

        char[] passw = "password".toCharArray();
        KeyStore ks = KeyStore.getInstance("JKS", "SUN");
        ks.load(new FileInputStream ( "mykeystore" ), passw );

        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
        kmf.init(ks, passw);

        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);
        TrustManager[] tm = tmf.getTrustManagers();

        SSLContext sclx = SSLContext.getInstance("TLS");
        sclx.init( kmf.getKeyManagers(), tm, null);

        HostnameVerifier hv = new HostnameVerifier()
        {
            public boolean verify(String urlHostName, SSLSession session)
            {
                if (!urlHostName.equalsIgnoreCase(session.getPeerHost()))
                {
                    System.out.println("Warning: URL host '" + urlHostName + "' is different to SSLSession host '" + session.getPeerHost() + "'.");
                }
                return true;
            }
        };

        HttpsURLConnection.setDefaultSSLSocketFactory( sclx.getSocketFactory() );
        HttpsURLConnection.setDefaultHostnameVerifier(hv);

위의 답변을 바탕으로 KeyTool (JDK 1.6+ 필요)을 사용하여 독립적으로 생성 된 Comodo Cert 및 Private Key에서 Java 기반 웹 서버를위한 새로운 키 스토어를 만드는 방법이 있습니다.

  1. 이 명령을 발행하고 비밀번호 프롬프트에서 약간의 Passe - 'Server.crt'는 서버의 인증서이고 'Server.key'는 CSR을 발행하는 데 사용한 개인 키입니다. openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name www.yourdomain.com -CAfile AddTrustExternalCARoot.crt -caname "AddTrust External CA Root"

  2. 그런 다음 KeyTool을 사용하여 P12 키 스토어를 JKS Keystore로 변환합니다. keytool -importkeystore -deststorepass somepass -destkeypass somepass -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass somepass

그런 다음 Comodo에서받은 다른 두 개의 루트/중간 인증을 가져옵니다.

  1. comodorsaaddtrustca.crt 가져 오기 : keytool -import -trustcacerts -alias cert1 -file COMODORSAAddTrustCA.crt -keystore keystore.jks

  2. comodorsadomainvalidationsecureserverca.crt 가져 오기 : keytool -import -trustcacerts -alias cert2 -file COMODORSADomainValidationSecureServerCA.crt -keystore keystore.jks

이 단계를 사용하여 키를 기존 키 저장소로 가져올 수 있습니다. 지침은이 스레드 및 기타 사이트의 답변에서 결합됩니다. 이 지침은 저를 위해 작동했습니다 (Java Keystore) :

  1. 운영

openssl pkcs12 -export -in yourserver.crt -inkey yourkey.key -out server.p12 -name somename -certfile yourca.crt -caname root

(필요한 경우 -체인 옵션을 넣습니다. 그러면 비밀번호를 묻습니다. 올바른 암호를 제공해야합니다. 그렇지 않으면 오류가 발생합니다 (제목 오류 또는 패딩 오류 등).

  1. 새 비밀번호를 입력하도록 요청합니다. 여기에 비밀번호를 입력해야합니다. 무엇이든 입력하십시오. (Aragorn에 들어가는 것을 가정 해 봅시다).
  2. PKCS 형식의 Server.p12 파일이 생성됩니다.
  3. 이제 그것을 가져 오기 위해 *.jks 파일 실행 :
    keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -destkeystore yourexistingjavakeystore.jks -deststoretype JKS -deststorepass existingjavastorepassword -destkeypass existingjavastorepassword
    (매우 중요합니다 - DeststorePass와 DestkeyPass 매개 변수를 남기지 마십시오.)
  4. SRC 키 저장소 암호를 요청합니다. Aragorn을 입력하고 Enter를 누르십시오. 인증서와 키는 이제 기존 Java Keystore로 가져옵니다.

이전 답변은 JKS 파일을 PKCS #12 형식으로 먼저 변환하여 표준 JDK 도구로만이 작업을 수행 할 수 있음을 올바르게 지적합니다. 관심이 있으시면 KeyStore를 PKCS #12로 변환 할 필요없이 OpenSSL에서 파괴 된 키를 JKS 형식 키 스토어로 가져 오는 소형 유틸리티를 구성했습니다. http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art049

다음과 같은 링크 된 유틸리티를 사용합니다.

$ openssl req -x509 -newkey rsa:2048 -keyout localhost.key -out localhost.csr -subj "/CN=localhost"

(CSR에 서명하고 LocalHost.cer를 되 찾으십시오)

$ openssl rsa -in localhost.key -out localhost.rsa
Enter pass phrase for localhost.key:
writing RSA key
$ java -classpath . KeyImport -keyFile localhost.rsa -alias localhost -certificateFile localhost.cer -keystore localhost.jks -keystorePassword changeit -keystoreType JKS -keyPassword changeit

PEM 파일이있는 경우 (예 : server.pem) 포함 :

  • 신뢰할 수있는 인증서
  • 개인 키

그런 다음 인증서와 키를 다음과 같은 JKS 키 스토어로 가져올 수 있습니다.

1) PEM 파일에서 개인 키를 ASCII 파일로 복사하십시오 (예 : server.key)

2) PEM 파일에서 인증서를 ASCII 파일에 복사하십시오 (예 : server.crt)

3) CERT 및 키를 PKCS12 파일로 내보내십시오.

$ openssl pkcs12 -export -in server.crt -inkey server.key \
                 -out server.p12 -name [some-alias] -CAfile server.pem -caname root
  • PEM 파일은 -CAfile 옵션.
  • '내보내기'비밀번호를 받으십시오.
  • git bash 에서이 작업을 수행하면 추가하십시오 winpty 명령의 시작 부분에 내보내기 암호를 입력 할 수 있습니다.

4) PKCS12 파일을 JKS Keystore로 변환하십시오.

$ keytool -importkeystore -deststorepass changeit -destkeypass changeit \
          -destkeystore keystore.jks  -srckeystore server.p12 -srcstoretype PKCS12 \
          -srcstorepass changeit
  • 그만큼 srcstorepass 암호는 3 단계에서 내보내기 암호와 일치해야합니다.

내가 달성하려고했던 것은 이미 제공된 개인 키와 인증서를 사용하여 메시지가 나에게서 나오도록해야 할 곳 (공개 키가 암호화하는 동안 개인 키 표시)을 사용하는 데 필요한 메시지에 서명하는 것이 었습니다.

그래서 이미 .key 파일과 .crt 파일이있는 경우?

이 시도:

1 단계: 키와 cert를 .p12 파일로 변환하십시오

openssl pkcs12 -export -in certificate.crt -inkey privateKey.key -name alias -out yourconvertedfile.p12

2 단계: 키를 가져 와서 단일 명령으로 .jsk 파일을 만듭니다.

keytool -importkeystore -deststorepass changeit -destkeystore keystore.jks -srckeystore umeme.p12 -srcstoretype PKCS12

3 단계 : : 당신의 자바에서 :

char[] keyPassword = "changeit".toCharArray();

KeyStore keyStore = KeyStore.getInstance("JKS");
InputStream keyStoreData = new FileInputStream("keystore.jks");

keyStore.load(keyStoreData, keyPassword);
KeyStore.ProtectionParameter entryPassword = new KeyStore.PasswordProtection(keyPassword);
KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry)keyStore.getEntry("alias", entryPassword);

System.out.println(privateKeyEntry.toString());

이 키를 사용하여 일부 문자열에 서명 해야하는 경우 다음을 수행하십시오.

1 단계 : 암호화하려는 텍스트 변환

byte[] data = "test".getBytes("UTF8");

2 단계 : Base64 인코딩 된 개인 키를 가져옵니다

keyStore.load(keyStoreData, keyPassword);

//get cert, pubkey and private key from the store by alias
Certificate cert = keyStore.getCertificate("localhost");
PublicKey publicKey = cert.getPublicKey();
KeyPair keyPair = new KeyPair(publicKey, (PrivateKey) key);

//sign with this alg
Signature sig = Signature.getInstance("SHA1WithRSA");
sig.initSign(keyPair.getPrivate());
sig.update(data);
byte[] signatureBytes = sig.sign();
System.out.println("Signature:" + Base64.getEncoder().encodeToString(signatureBytes));

sig.initVerify(keyPair.getPublic());
sig.update(data);

System.out.println(sig.verify(signatureBytes));

참조 :

  1. SSL에서 사용할 Java Keystore에서 기존 x509 인증서 및 개인 키를 가져 오는 방법은 무엇입니까?
  2. http://tutorials.jenkov.com/java-cryptography/keystore.html
  3. http://www.java2s.com/code/java/security/retrievingakeypairfromakeystore.htm
  4. 개인 키로 문자열에 서명하는 방법

최종 프로그램

public static void main(String[] args) throws Exception {

    byte[] data = "test".getBytes("UTF8");

    // load keystore
    char[] keyPassword = "changeit".toCharArray();

    KeyStore keyStore = KeyStore.getInstance("JKS");
    //System.getProperty("user.dir") + "" < for a file in particular path 
    InputStream keyStoreData = new FileInputStream("keystore.jks");
    keyStore.load(keyStoreData, keyPassword);

    Key key = keyStore.getKey("localhost", keyPassword);

    Certificate cert = keyStore.getCertificate("localhost");

    PublicKey publicKey = cert.getPublicKey();

    KeyPair keyPair = new KeyPair(publicKey, (PrivateKey) key);

    Signature sig = Signature.getInstance("SHA1WithRSA");

    sig.initSign(keyPair.getPrivate());
    sig.update(data);
    byte[] signatureBytes = sig.sign();
    System.out.println("Signature:" + Base64.getEncoder().encodeToString(signatureBytes));

    sig.initVerify(keyPair.getPublic());
    sig.update(data);

    System.out.println(sig.verify(signatureBytes));
}

PKCS12 Keystore 만 만들면 Java가 지금 직접 사용할 수 있습니다. 실제로 Java 스타일의 키 스토어를 나열하면 KeyTool 자체가 PKCS12가 이제 선호하는 형식이라는 사실을 알려줍니다.

openssl pkcs12 -export -in server.crt -inkey server.key \
               -out server.p12 -name [some-alias] \
               -CAfile ca.crt -caname root -chain

인증서 제공 업체로부터 세 가지 파일 (Server.crt, Server.key, Ca.crt)을 모두 수신해야합니다. "-Caname Root"가 실제로 무엇을 의미하는지 잘 모르겠지만 그런 식으로 지정 해야하는 것 같습니다.

Java 코드에서는 올바른 키 스토어 유형을 지정하십시오.

KeyStore.getInstance("PKCS12")

Comodo.com- 발행 SSL 인증서가 Nanohttpd에서 잘 작동했습니다.

Let 's Encrypt 인증서를 사용합니다

인증서와 개인 키를 만들었다고 가정합니다 암호화합시다 안에 /etc/letsencrypt/live/you.com:

1. a PKCS #12 파일

openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out pkcs.p12 \
        -name letsencrypt

SSL 인증서를 결합합니다 fullchain.pem 그리고 당신의 개인 키 privkey.pem 단일 파일로 pkcs.p12.

비밀번호를 받으십시오 pkcs.p12.

그만큼 export 옵션은 PKCS #12 파일이 구문 분석하지 않고 생성되도록 지정합니다 ( 매뉴얼).

2. Java Keystore를 만듭니다

keytool -importkeystore -destkeystore keystore.jks -srckeystore pkcs.p12 \
        -srcstoretype PKCS12 -alias letsencrypt

만약에 keystore.jks 존재하지 않으며, 포함되어 있습니다 pkcs.12 위에 만든 파일. 그렇지 않으면 가져 오십시오 pkcs.12 기존 키 스토어로.


이 지침은에서 파생되었습니다 이 블로그 게시물.

여기 더 있습니다 다른 종류의 파일에서 /etc/letsencrypt/live/you.com/.

타원 곡선의 경우 질문에 답하십시오. Java Keystore에서 기존 x509 인증서 및 개인 키 가져 오기, 당신은이 스레드를 살펴볼 수 있습니다. .pem 파일 형식에있는 Java에서 EC 개인 키를 읽는 방법

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top