2016-09-29 5 views
0

apache2 httpd에서 (Java 기반) vert.x 3 서버로 마이그레이션해야합니다.ssl을 사용할 때 apache2에서 vertx 3으로 마이그레이션

<VirtualHost> 
    ... 

    SSLCertificateFile certificate.cer 
    SSLCertificateKeyFile privatekey.key 
    SSLCertificateChainFile intermediate.cer 

    ... 
</VirtualHost> 

브라우저가 불만없이 HTTPS 연결을 받아 일 : 아파치 아파치가 성공적으로 ssl.conf에서 다음과 같은 세 가지 인증서/키 파일 (단축 경로)를 사용하여 구성 할 수있다.

는 vert.x 3 키 스토어를 생성하고 그것을 실행 한 후, 브라우저는 저에게 말한다 :

www.mydomain.com uses an invalid security certificate. 
The certificate is not trusted because the issuer certificate 
is unknown. The server might not be sending the appropriate 
intermediate certificates. 
An additional root certificate may need to be imported. 
Error code: SEC_ERROR_UNKNOWN_ISSUER 

그러나, 브라우저는 올바른 서버 인증서와 중간 인증서를받을 것으로 보인다.

제대로 작동하는 apache2 httpd 구성에서 어떤 심각한 루트 인증서 (GeoTrust 루트 인증서)가 사용되는지 어떻게 알 수 있습니까? Java 키 저장소에 포함시켜야합니까?

예인 경우, httpd가 올바른 루트 인증서를 어떻게 찾을 수 있습니까?

.../mozilla 폴더는 서버의 루트 인증서를 가져올 수있는 적절한 위치에 있습니다 (브라우저에서 사용할 수있는 인증서의 위치라고 생각합니다)?

대체 설명을 배제하는 방법 : vertx에 ssl 기능에 알려진 버그가 있습니까?

+0

코드에서 SSL을 구성하는 방법을 간단한 코드 예제로 제공하면 문제를 쉽게 이해할 수 있습니다. –

+0

"코드"란 무엇을 의미합니까? Vert.x 3이 Java 키 스토어 (.새로운 HttpServerOptions() .setSsl (참) .setKeyStoreOptions ( 새로운 JksOptions() .setPath ("keystore.jks") .setPassword ("...") : JKS)는 키 스토어와 비밀번호를한다 ) ); - 또는 Java 키 스토어를 생성하기 위해 openssl과 keytool을 사용하는 bash 스크립트 "code"를 사용 했습니까? <- 브라우저가 오류 코드 : SEC_ERROR_UNKNOWN_ISSUER를 제공한다는 점을 제외하면 작동하는 것 같습니다 (중간, 인증서 및 키는 o.k입니다). – Michael

+1

키 스토어 또는 openssl 인증서를 사용하고 있는지 알고 싶습니다. 예를 들어, 기존 openssl 인증서를 다음과 같이 사용할 수 있습니다. 'vertex.createHttpServer (new HttpServerOptions() .setSsl (true) .setPemKeyCertOptions (new PemKeyCertOptions() .setKeyPath (" server-key.pem ") .setCertPath ("server-cert.pem ") )); –

답변

1

Vert.x SSL 구성은 keystores 또는 OpenSSL을 사용하여 구성 할 수 있습니다. 그들은 모두 장단점이 있지만 Apache에서 Vert.x으로 마이 그 레이션하는 경우 최단 경로는 OpenSSL 엔진을 사용합니다. 프로젝트에서 하나의 추가 종속성이 필요합니다 OpenSSL 엔진을 사용하기 위해

는 :

<dependency> 
    <groupId>io.netty</groupId> 
    <artifactId>netty-tcnative-boringssl-static</artifactId> 
    <version>1.1.33.Fork21</version> 
</dependency> 

Netty OpenSSL을 이상 정확히 BoringSSL 따라서 사용하는 기존의 인증서를 사용할 수 있습니다. 로드 인증서는이 같은 HttpOptions 객체를 생성하여 수행됩니다

new HttpServerOptions() 
    .setSsl(true) 
    .setPemKeyCertOptions(
    new PemKeyCertOptions() 
     .setKeyPath("privatekey.key") 
     .setCertPath("certificate.cer"))); 

키 저장 옵션 구성이 예상하는 개인 키와 개인 정보 보호 강화 된 전자 메일 (PEM) 파일을 기반으로 인증서.

예를 들어 PEM 블록에 싸여 PKCS8 형식의 비 암호화 된 개인 키를 포함해야 키 파일 : 들어, 인증서 파일이 PEM 블록에 싸여 X.509 인증서를 포함해야합니다

-----BEGIN PRIVATE KEY----- 
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDV6zPk5WqLwS0a 
... 
K5xBhtm1AhdnZjx5KfW3BecE 
-----END PRIVATE KEY----- 

을 예 :

-----BEGIN CERTIFICATE----- 
MIIDezCCAmOgAwIBAgIEZOI/3TANBgkqhkiG9w0BAQsFADBuMRAwDgYDVQQGEwdV 
... 
+tmLSvYS39O2nqIzzAUfztkYnUlZmB0l/mKkVqbGJA== 
-----END CERTIFICATE----- 

가 인증서 체인에 대한 실제 지원은 없지만 (공용 직면 사이트가있는 경우)를 방문하여 해결 할 수 : https://whatsmychaincert.com/ 올바른 체인을 다운로드 (유지되지 않은 "루트 인증서 포함") . 이 다운로드는 certificate.cer이됩니다.

+0

내 경우 엔 stll이 작동하지 않습니다. "누락 ----- 비공개 키 ----- 구분 기호"라는 오류 메시지가 표시됩니다. 내 키는 ----- BEGIN RSA 개인 키 -----로 시작합니다. RSA를 취소하면 작동하지 않습니다. 그러나 그 열쇠는 apache2에서 잘 작동합니다. – Michael

+0

누락 된 부분은 다음과 같습니다. $ openssl pkcs8 -topk8 -in privatekey.pem -inform pem -out openssl_key_pk8.pem -outform pem -nocrypt. 그리고 나서 openssl_key_pk8.pem이 위의 절차의 일부가 될 수 있습니다. – Michael

+0

openjdk에는 모든 강력한 암호화 알고리즘이 포함되어 있지 않으므로 oracle jdk에서 실행을 시도하십시오. –