2016-07-06 9 views
2

Apple APNサービスを起動できるコンポジットを開発するためのoracle SOA 12cを基本Weblogicドメインに設定しました。 Apple APNでは、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384およびTLS 1.2で暗号化されたHTTP2接続が必要です。Oracle BPEL(Java 8U92)がHTTPSを使用してRESTサービスを呼び出すと、SSLハンドシェイク例外が発生する

JKSトラストストアは、ルート証明書、中間証明書、およびサーバー証明書の証明書で構成およびロードされています。

geotrustrootca, Jun 21, 2016, trustedCertEntry, 
Certificate fingerprint (SHA1): DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12 
serverc_ss_cert, Jun 21, 2016, trustedCertEntry, 
Certificate fingerprint (SHA1): 73:C4:A9:4E:E8:1B:14:58:7B:64:47:02:73:01:15:3E:88:E8:E8:66 
appledevpush, Jun 21, 2016, trustedCertEntry, 
Certificate fingerprint (SHA1): CC:18:A5:75:04:74:3A:3B:72:D7:A5:07:F2:CD:E4:83:51:11:34:CB 
appleintermediate, Jun 21, 2016, trustedCertEntry, 
Certificate fingerprint (SHA1): 8E:83:21:CA:08:B0:8E:37:26:FE:1D:82:99:68:84:EE:B5:F0:D6:55 

setDomainEnv.shはSSLHandshakeExceptionで失敗した場合、AppleのAPNサービスへのREST呼び出しを行う、単純なBPELコンポジットをテストする場合はJavaプロパティ-Djavax.net.ssl.trustStore=/u01/data/keystores/truststore.jks

を追加することによって変更されました:

[ACTIVE] ExecuteThread: '58' for queue: 'weblogic.kernel.Default (self-tuning)', SEND TLSv1.2 ALERT: fatal, description = certificate_unknown 
[ACTIVE] ExecuteThread: '58' for queue: 'weblogic.kernel.Default (self-tuning)', WRITE: TLSv1.2 Alert, length = 2 
[ACTIVE] ExecuteThread: '58' for queue: 'weblogic.kernel.Default (self-tuning)', called closeSocket() 
[ACTIVE] ExecuteThread: '58' for queue: 'weblogic.kernel.Default (self-tuning)', handling exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

SSLネゴシエーションのデバッグ時に表示されます。

%% No cached client session 
*** ClientHello, TLSv1.2 

.... 

*** ServerHello, TLSv1.2 
RandomCookie: GMT: 1922117017 bytes = { 236, 133, 59, 43, 182, 3, 165, 71, 241, 54, 240, 145, 222, 41, 200, 242, 63, 237, 253, 77, 188, 235, 187, 177, 245, 173, 53, 232 } 
Session ID: {119, 250, 96, 4, 116, 33, 211, 17, 47, 213, 227, 158, 164, 107, 14, 73, 157, 194, 0, 104, 54, 237, 0, 58, 229, 225, 158, 2, 29, 159, 79, 171} 
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 

... 

%% Initialized: [Session-7, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384] 
** TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 
[ACTIVE] ExecuteThread: '58' for queue: 'weblogic.kernel.Default (self-tuning)', READ: TLSv1.2 Handshake, length = 2576 
*** Certificate chain 
chain [0] = [ 
[ 
    Version: V3 
    Subject: C=US, ST=California, O=Apple Inc., OU=management:idms.group.533599, CN=api.development.push.apple.com 
    Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11 

... 

chain [1] = [ 
[ 
    Version: V3 
    Subject: C=US, O=Apple Inc., OU=Certification Authority, CN=Apple IST CA 2 - G1 
    Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11 

... 

*** 
%% Invalidated: [Session-7, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384] 
[ACTIVE] ExecuteThread: '58' for queue: 'weblogic.kernel.Default (self-tuning)', SEND TLSv1.2 ALERT: fatal, description = certificate_unknown 
[ACTIVE] ExecuteThread: '58' for queue: 'weblogic.kernel.Default (self-tuning)', WRITE: TLSv1.2 Alert, length = 2 
[ACTIVE] ExecuteThread: '58' for queue: 'weblogic.kernel.Default (self-tuning)', called closeSocket() 
[ACTIVE] ExecuteThread: '58' for queue: 'weblogic.kernel.Default (self-tuning)', handling exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

私の結論は、サーバN=api.development.push.apple.comのためのサーバー証明書が受理されているが、中間CA CN=Apple IST CA 2 - G1の証明書が拒否されたことです。

CN=Apple IST CA 2 - G1の発行者はのCN=GeoTrust Global CA, O=GeoTrust Inc., C=USです。この証明書もトラストストアにロードされます。

別名:geotrustrootca 作成日:2016年6月21日 エントリタイプ:trustedCertEntry

Owner: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US 
Issuer: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US 
Serial number: 23456 
Valid from: Tue May 21 06:00:00 CEST 2002 until: Sat May 21 06:00:00 CEST 2022 
Certificate fingerprints: 
    MD5: F7:75:AB:29:FB:51:4E:B7:77:5E:FF:05:3C:99:8E:F5 
    SHA1: DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12 
    SHA256: FF:85:6A:2D:25:1D:CD:88:D3:66:56:F4:50:12:67:98:CF:AB:AA:DE:40:79:9C:72:2D:E4:D2:B5:DB:36:A7:3A 
    Signature algorithm name: SHA1withRSA 
    Version: 3 

任意のアイデア(私の結論が正しければ)中間証明書が拒否されたり、さらにこれをデバッグする方法なぜ?ブラウザを使用してURIをAPNに開き、証明書を検査するとき、私はトラストストアと同じになります。

==更新== 1

カールを使用して接続しようとしました。 まずトラストからU01 /データ/キーストア/に

$keytool -keystore truststore.jks -exportcert -alias geotrustrootca | openssl x509 -inform der -text > geotrustrootca.pem 
$keytool -keystore truststore.jks -exportcert -alias appledevpush | openssl x509 -inform der -text > appledevpush.pem 
$keytool -keystore truststore.jks -exportcert -alias appleintermediate | openssl x509 -inform der -text > appleintermediate.pem 

を証明書をエクスポートするには、そのように証明書が正しいカール

$ curl --capath /u01/data/keystores --verbose https://api.development.push.apple.com/3/device/ 
* About to connect() to api.development.push.apple.com port 443 (#0) 
* Trying 17.172.238.203... connected 
* Connected to api.development.push.apple.com (17.172.238.203) port 443 (#0) 
* Initializing NSS with certpath: sql:/etc/pki/nssdb 
* failed to load '/u01/data/keystores/identitykeystore.jks' from CURLOPT_CAPATH 
* failed to load '/u01/data/keystores/appledevpush.cer' from CURLOPT_CAPATH 
* failed to load '/u01/data/keystores/geotrustrootca.cer' from CURLOPT_CAPATH 
* failed to load '/u01/data/keystores/truststore.jks' from CURLOPT_CAPATH 
* failed to load '/u01/data/keystores/yum-oracle-8v1ncO' from CURLOPT_CAPATH 
* failed to load '/u01/data/keystores/vm0010.localdomain-rootCA.der' from CURLOPT_CAPATH 
* failed to load '/u01/data/keystores/appleintermediate.cer' from CURLOPT_CAPATH 
* CAfile: /etc/pki/tls/certs/ca-bundle.crt 
    CApath: /u01/data/keystores 
* NSS: client certificate not found (nickname not specified) 
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 
* Server certificate: 
* subject: C=US,ST=California,O=Apple Inc.,OU=management:idms.group.533599,CN=api.development.push.apple.com 
* start date: Jun 19 01:49:43 2015 GMT 
* expire date: Jul 18 01:49:43 2017 GMT 
* common name: api.development.push.apple.com 
* issuer: C=US,O=Apple Inc.,OU=Certification Authority,CN=Apple IST CA 2 - G1 
> GET /3/device/ HTTP/1.1 
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2 
> Host: api.development.push.apple.com 
> Accept: */* 
> 
* Connection #0 to host api.development.push.apple.com left intact 
* Closing connection #0 
@@�HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 474554202f332f6465766963652f20485454502f312e310d 

を使用して接続しようとしました。

もう一度==更新== 2

再作成したトラストストア。 netscapeでurl https://api.development.push.apple.com/3/device/を開き、証明書をpem形式で保存して、pemファイルを取得します。 ; ls -1 *.derでのファイルの新しいtruststore.jks

内の証明書をインポート

do keytool -importcert -keystore truststore.jks -file $ file -storepass welcome1 -noprompt -alias $ file;完了

いいえ喜び...

==アップデート3 ==管理対象サーバを再起動は、デフォルトの自己署名証明書もロードされていることをserver.outにobvservedさ

<Jul 11, 2016 10:15:50 PM CEST> <Warning> <oracle.soa.healthcheck> <BEA-000000> <On startup, health check id 881 failed for category 'Startup'. Ran 6 checks. Number of failures=1, errors=1, warnings=0.> 
adding as trusted cert: 
    Subject: CN=CertGenCA, OU=FOR TESTING ONLY, O=MyOrganization, L=MyTown, ST=MyState, C=US 
    Issuer: CN=CertGenCA, OU=FOR TESTING ONLY, O=MyOrganization, L=MyTown, ST=MyState, C=US 
    Algorithm: RSA; Serial number: 0x40044886c441ef3b643a8066409afca0 
    Valid from Sat Dec 01 04:07:51 CET 2012 until Thu Dec 02 04:07:51 CET 2032 

adding as trusted cert: 
    Subject: CN=CertGenCAB, OU=FOR TESTING ONLY, O=MyOrganization, L=MyTown, ST=MyState, C=US 
    Issuer: CN=CertGenCAB, OU=FOR TESTING ONLY, O=MyOrganization, L=MyTown, ST=MyState, C=US 
    Algorithm: RSA; Serial number: 0x234b5559d1fa0f3ff5c82bdfed032a87 
    Valid from Thu Oct 24 17:54:45 CEST 2002 until Tue Oct 25 17:54:45 CEST 2022 

javax.net.ssl.trustStoreがカスタムトラストストアに設定されています。また、WeblogicではIdentityおよびTruststoreの場所がカスタムJKSストアに設定されています。

$ WLS_HOME/libからDemoTrust.jksを削除した後でも、証明書は信頼できる証明書として追加されます。私は現在、これらがどこから来るのかわからない。

==更新== 4

$ DOMAIN_HOME /セキュリティがDemoIdentity.jksを含んでいました。このファイルを削除して管理対象サーバーを再起動すると、デモの信頼された証明書はもうロードされません。

==更新== 5

は、ターゲットURL SAS SSL/TLSのdiagnosicsツールに対するトラストストアを検証しました。トラストストアが正しく設定されていることを確認する。

SAS SSL/TLS diagnostics tool

としてはOPSSストアは、Javaプロパティは、javax.net.ssl.trustStoreに定義されたJKSキーストアの代わりに使用しなければならないuser2351802が指摘。

片方向SSLを使用してコンポジットから外部Webサービスを呼び出す場合の標準的な方法は、JKSトラストストアを作成し、そのトラストストアの場所をjavax.net.ssl.trustStore Javaプロパティで指定することです。 SOA Suite 12.2.1.1 Admin Guideには、SOAコンポジットからのMaken一方向SSL接続にJKSトラストストアを使用することが依然として記載されています。 Oracle WebLogic Server 12.2.1.1.0 Admin Guideには(新しい)OPSSキーストアが記載されており、新しいKSS OPSSキーストアを使用および設定するためのドキュメント "Securing Applications with Oracle Platform Security Services"を参照しています。 LDAPに対して一方向SSLを明示的に設定する手順については触れていますが、FMWアプリケーションの新しい一般的な方法と思われます。

weblogicでアイデンティティとトラストストアをクリーンアップし、サーバ証明書をアイデンティティストアに追加した後(つまり、JKSトラストストアにトラステッド証明書がなくなった)、ルート証明書をOPSSシステムに追加するか、

+0

'$ JAVA_HOME/lib/security/java.security'ファイルの' jdk.certpath.disabledAlgorithms'行には何が入っていますか? –

+0

含まれています。 jdk.certpath.disabledAlgorithms = MD2、MD5、RSA keySize <1024 – pcvnes

+0

openssl s_client -connect ...でOpenSSLなどのSSL接続を確立するには何か他のものがありますか? –

答えて

1

OK。それは奇妙に聞こえるが、うまくいく。同じSOA 12cセットアップがありますが、マネージドSOAサーバーにはStandard Java Trustキーストアが使用されています。

setDomainEnv.shを変更して、キーストアとして/u01/data/keystores/truststore.jksを指定していることがわかります。

理論的には、ルート証明書が自分のケースのcacertsにあり、あなたのケースでtruststore.jksが存在すれば、それは機能するはずです。私は、SOAPサービスがキーストアで正常に動作していることを確認できます。

RESTアダプタを使用してRESTサービスを呼び出すのが、あなたと同じ証明書エラーのために失敗していました。

Here's what made it to work: 
Login to EM 
Weblogic Domain -> Security -> Keystore 
Select System (stripe) -> trust -> Hit the manage button 
Here import the root cert of geotrustrootca. 

SOAサーバーをバウンスします。あなたのサービスをテストしてください。それは正常に動作するはずです。

システム(ストライプ) - > trust =これは、ドメインを構成するときにデモトラストストアとして事前設定された です。 I は、すでに管理対象サーバーのキーストア設定を cacertsに変更しています。どういうわけか、このkssのトラストストアはまだどこかで参照されている のようです。問題はどこですか?

あなたはこのことを理解してください。その間に解決策が出てくるでしょう。

+0

こんにちは、指摘ありがとう! – pcvnes

関連する問題