質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AppleScript

AppleScriptは、アップル社が開発しているMac OS用のスクリプト言語。AppleScript本体に限らず、同じ言語で多くのAppleScript対応アプリケーションを操縦することが可能です。 自然言語(英語)に近い構文を持ちます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

App Store

App Storeは、Apple社が運営する、iPhone、iPod touch、iPad向けアプリケーションソフトのダウンロードサービスです。携帯電話、Wi-Fiによる無線通信に対応しており、多くのアプリケーションをダウンロード、インストールすることができます。世界中の開発者によってアプリケーションが登録されており、有償のソフトもあればフリーソフトも多く登録されています。

Q&A

0回答

901閲覧

Javaでpemを使用したSSL通信をする事ができない(ApplePay)

rain5100

総合スコア12

AppleScript

AppleScriptは、アップル社が開発しているMac OS用のスクリプト言語。AppleScript本体に限らず、同じ言語で多くのAppleScript対応アプリケーションを操縦することが可能です。 自然言語(英語)に近い構文を持ちます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

App Store

App Storeは、Apple社が運営する、iPhone、iPod touch、iPad向けアプリケーションソフトのダウンロードサービスです。携帯電話、Wi-Fiによる無線通信に対応しており、多くのアプリケーションをダウンロード、インストールすることができます。世界中の開発者によってアプリケーションが登録されており、有償のソフトもあればフリーソフトも多く登録されています。

0グッド

1クリップ

投稿2019/07/23 09:26

編集2019/07/29 09:58

前提・実現したいこと

・前提
JavaでApplePayをWebに実装するシステムを作っています。
ApplePayでは、作成した認証pemファイルを使用し、Appleのサーバに通信をおこわなければなりません。
pemファイルを使用したSSL通信はPHPで行う事ができました。
ですが、Javaでは作成する事がどうしてもできませんでした。

参考サイト:https://mintaku-blog.net/applepay-web/#crayon-5d1072f403b65388217018

・実現したい事
JavaでPemを使用したSSL通信ができる事

発生している問題

PHPでできるpemを使用したSSL認証をJavaでする事ができない

該当のソースコード

参考プログラミング:https://github.com/norfolkmustard/ApplePayJS

<?php $validation_url = $_GET['u']; if( "https" == parse_url($validation_url, PHP_URL_SCHEME) && substr( parse_url($validation_url, PHP_URL_HOST), -10 ) == ".apple.com" ){ require_once ('/your/path/to/applepay_includes/apple_pay_conf.php'); // create a new cURL resource $ch = curl_init(); $data = '{"merchantIdentifier":"'.PRODUCTION_MERCHANTIDENTIFIER.'", "domainName":"'.PRODUCTION_DOMAINNAME.'", "displayName":"'.PRODUCTION_DISPLAYNAME.'"}'; curl_setopt($ch, CURLOPT_URL, $validation_url); curl_setopt($ch, CURLOPT_SSLCERT, PRODUCTION_CERTIFICATE_PATH); //こちらで認証用のpemを追加 curl_setopt($ch, CURLOPT_SSLKEY, PRODUCTION_CERTIFICATE_KEY); //こちらで認証用のpemを追加 curl_setopt($ch, CURLOPT_SSLKEYPASSWD, PRODUCTION_CERTIFICATE_KEY_PASS); //こちらで認証用のpemを追加 curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); if(curl_exec($ch) === false) { echo '{"curlError":"' . curl_error($ch) . '"}'; } // close cURL resource, and free up system resources curl_close($ch); } ?>

Java開発参考にしたサイト
(JavaではPem通信について下記のサイトを参考にしました。 こちらの古いのでうまく動きませんでした)
参考:http://omiya6048.hatenablog.com/entry/2013/05/31/210000

PEMReader pr = new PEMReader(new FileReader("cert.pem")); X509Certificate cert = (X509Certificate) pr.readObject(); PEMReader kr = new PEMReader(new FileReader("privkey.pem"), new PasswordFinder() { public char[] getPassword() { return "passphase".toCharArray(); } }); KeyPair key = (KeyPair) kr.readObject(); KeyStore ksKeys = KeyStore.getInstance("JKS"); ksKeys.load(null, "passphase".toCharArray()); ksKeys.setCertificateEntry("MyCert", cert); ksKeys.setKeyEntry("Mykey", key.getPrivate(), "passphase".toCharArray(), new Certificate[]{cert}); KeyManagerFactory kmf = KeyManagerFactory.getInstance( KeyManagerFactory.getDefaultAlgorithm()); kmf.init(ksKeys, "passphase".toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); tmf.init(ksKeys); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); Socket socket = sslContext.getSocketFactory().createSocket( "localhost", 4433); BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream())); PrintWriter out = new PrintWriter(new OutputStreamWriter( socket.getOutputStream())); out.println("Hello World"); System.out.println(in.readLine()); out.close(); in.close();

試したこと

・Javaでpem通信を行う参考資料を試しましたが、コードが古く動きませんでした
参考:http://omiya6048.hatenablog.com/entry/2013/05/31/210000

・PHP内のheaderとbody情報を確認しましたが、headerは無く、bodyは
「'{"merchantIdentifier":"'.PRODUCTION_MERCHANTIDENTIFIER.'", "domainName":"'.PRODUCTION_DOMAINNAME.'", "displayName":"'.PRODUCTION_DISPLAYNAME.'"}'」の内容がありました。
ですが、それをJavaにベタで記入しても動きませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

A-pZ

2019/07/23 12:28

Javaの実装コードがないのと、どこでエラーになっているのかが残念ながらわかりませんので、実装されたコードやスタックトレースなどを記載すると回答が得られるでしょう。
rain5100

2019/07/29 09:59 編集

JavaではPem通信について下記のサイトを参考にしました。 こちらのサイトでPem通信できるかわかりませんが、末尾に記載してありますエラーが表示されています。 こちらのエラーも対応できずにおります。わかりましたら、お教えいただきたいです。 よろしくお願いいたします。 Java内容を本文に追加しました。 ・エラー内容 Exception in thread "main" java.lang.SecurityException: class "org.bouncycastle.openssl.PEMReader"'s signer information does not match signer information of other classes in the same package
mikkame

2019/07/26 07:37

javaは分からないんですがエラーを訳すと外部パッケージの署名情報が間違っている (不正なプログラムが混入している可能性がある)よって事かと。ランタイムエラーでもないですよね? SSL通信よりかは、まずパッケージの読み込みが問題なのではないかと思います。 あとコメント欄だとmarkdown効かないので本文に追記してください
rain5100

2019/07/29 10:15

ご指摘・アドバイスありがとうございます。 参考にしたJavaではパッケージの読み込みで失敗しているようでした。 デバックで確認した所、追加したライブラリー(http://omiya6048.hatenablog.com/entry/2013/05/31/210000)がうまく起動していないようでした。 こちらのライブラリーの中身から必要な箇所だけ、自身のサイトに追加して試してみようと思います。 また、下記サイト以外に良いサイトがあれば、教えて頂きたいです。よろしくお願いします http://omiya6048.hatenablog.com/entry/2013/05/31/210000
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問