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ツールに対するトラストストアを検証しました。トラストストアが正しく設定されていることを確認する。
としては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システムに追加するか、
'$ JAVA_HOME/lib/security/java.security'ファイルの' jdk.certpath.disabledAlgorithms'行には何が入っていますか? –
含まれています。 jdk.certpath.disabledAlgorithms = MD2、MD5、RSA keySize <1024 – pcvnes
openssl s_client -connect ...でOpenSSLなどのSSL接続を確立するには何か他のものがありますか? –