From f229c9ca4f7c686ed005825e49939ece8d876948 Mon Sep 17 00:00:00 2001 From: shi Date: Sat, 29 Mar 2025 10:32:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(api):=20=E6=B7=BB=E5=8A=A0=20PT=20API=20?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E7=A4=BA=E4=BE=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 PTAPIClient 类,用于演示如何调用 PT API - 添加证书文件和密码文件 - 实现了加载证书、初始化 SSL 上下文和发送 HTTPS 请求的逻辑 - 包含了跳过证书和主机名验证的实现 --- .../ff/game/api/pt/client/PTAPIClient.java | 86 ++++++++++++++++++ pp_p12/AGDRA_UAT.key | 30 ++++++ pp_p12/AGDRA_UAT.p12 | Bin 0 -> 3029 bytes pp_p12/AGDRA_UAT.pem | 36 ++++++++ pp_p12/AGDRA_UAT.pw | 1 + 5 files changed, 153 insertions(+) create mode 100644 ff-game/src/main/java/com/ff/game/api/pt/client/PTAPIClient.java create mode 100644 pp_p12/AGDRA_UAT.key create mode 100644 pp_p12/AGDRA_UAT.p12 create mode 100644 pp_p12/AGDRA_UAT.pem create mode 100644 pp_p12/AGDRA_UAT.pw diff --git a/ff-game/src/main/java/com/ff/game/api/pt/client/PTAPIClient.java b/ff-game/src/main/java/com/ff/game/api/pt/client/PTAPIClient.java new file mode 100644 index 0000000..fbf413c --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/pt/client/PTAPIClient.java @@ -0,0 +1,86 @@ +package com.ff.game.api.pt.client; + +import org.apache.commons.io.IOUtils; + +import javax.net.ssl.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.KeyStore; +import java.security.SecureRandom; +import java.security.cert.X509Certificate; + +public class PTAPIClient { + + public static void main(String[] args) { + CallAPI(); + } + + private static void CallAPI() { + try { + KeyStore ks = KeyStore.getInstance("PKCS12"); +//get certificate file from test/resources as InputFileStream & load to existing keystore + Path path = Paths.get(System.getProperty("user.dir"),"pp_p12"); + URL fileURL = new File(path.resolve("AGDRA_UAT.p12").toAbsolutePath().toString()).toURI().toURL(); + + File file = new File(fileURL.getFile()); + FileInputStream fis = new FileInputStream(file); + ks.load(fis, "A6ZCfYoycq5tDa5p".toCharArray()); + + +//Create KeyManagerFactory using loaded keystore + KeyManagerFactory kmf = + KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + kmf.init(ks, "A6ZCfYoycq5tDa5p".toCharArray()); + KeyManager[] kms = kmf.getKeyManagers(); +//Create TrustManager to bypass trusted certificate check + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + @Override + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + + @Override + public void checkClientTrusted(X509Certificate[] certs, String + authType) { + } + + @Override + public void checkServerTrusted(X509Certificate[] certs, String + authType) { + } + } + }; +//Hostname verification bypass method + HostnameVerifier allHostsValid = new HostnameVerifier() { + @Override + public boolean verify(String hostname, SSLSession session) { + return true; + } + }; +//Set connection properties to use bypass certificate/hostname check methods + + SSLContext sslContext = null; + sslContext = SSLContext.getInstance("TLS"); + sslContext.init(kms, trustAllCerts, new SecureRandom()); + HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); + HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); +//Send API call together with entity key for validation + HttpsURLConnection connection = (HttpsURLConnection) new + URL("https://kioskpublicapi.88shared.com/api/player/create/").openConnection(); + connection.setRequestProperty("Pragma", "2e51a98e76df7e2e22d720b13ffdb5cd05a90a921e46d54651b046ba08ae7d55f47bbd23e81fba733c170271f9789e16b21b4501ee026271bce0bb357cceaaba"); + InputStream response = connection.getInputStream(); + String resp = IOUtils.toString(response); + System.out.println(resp); + connection.disconnect(); + + + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/pp_p12/AGDRA_UAT.key b/pp_p12/AGDRA_UAT.key new file mode 100644 index 0000000..1a9015a --- /dev/null +++ b/pp_p12/AGDRA_UAT.key @@ -0,0 +1,30 @@ +Bag Attributes + localKeyID: A1 EA B4 FE 75 13 56 C4 8D 9A 45 97 9A 09 52 C5 3A 80 52 AF +Key Attributes: +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAyX3zP0OnqujQYoCnXMr18fNnigqPNfW5o3UeafPlbk9+2iNW +vrdjIbvOxnHA7kca6PfUtWcws3HrFmt0KsfBRbhKh7Kf1z6c0+U2TtpMl923nhzf +FLTrB239joAwsBnkRjEhcqWqYWZXEnhLohH4x1eCYuWFQB2dWMJxaGRawa+llJ9e +rkyYWKzyCIkSBAtA/fxND4SqB7WftXzrPFf9z1P92nm8iKiEJm5xOM14b8bsAeyr +sTcXLfgH4NHBzOSghWeGlDLDF/Cpra1cB5zL6JjS8dEGHJ1XKZxJgwIlTOL6Q5O5 +ElhCT4QnBhLxFHBC+2kmtgaRHZRyrcnXliU/6QIDAQABAoIBAQCL5qe+hXslcAFA +Y5PRGhsqo5aAglRtYvBCTk+PwYjLzuaFD4RrZ2mtQnmPz+vlhflpSKqoSb3G2pIg +PvupuIi5n/wfvCa/jPnXJo9OsMP9rjSP0/wQpI2L2xLyno8vtsqI8hQHRn/GoQhU +CrJ5FYFm55vgjvy2R9m4h0m28fcSA2YfQWZspsWf0VjzxNfYWJAu1PcR1oyzscMA +ts8fc/4+GIeSQlfl4B2wb0ZJk+z3Z/Cn+9Dzi3uCZrlm65qBAvQFuhPZzdr3odwE +9GLHAkFBU47XKDsBZNEesowstci57A5EL8EBrHiXX1hDc4bVhGbdq/nnrUcIV2T5 +4/6sS7MBAoGBAPvl0GAgr73VG8N6a2dgH3tbeJk9qDHxc76he0+lvWi6mWYW56eN +MMTUYK8PJHKIio/im8vD2HMDKNKcIH0JYWfm8uGd1ZgsrCOwYuC/o9hiEim583e7 +TuoibhB0oUqWiJrOlc5QS1AgZjUi0ZL/fDfFgYfZ1/Zb/l0sKq4F385fAoGBAMzF +/Wje6UNA09U7ftEAiwyGOJj1EfIWoEQrcdsxaRZrX9OnEgZakUqRtfT4i404faoq +OjsddQ9iyRxZAenHTrbzK2i4mszp2GVdsZgcjrAswUJcpDR97ov5HiOjEg+7dPiR +zrhunylAQ9fElZAUK4NHFNrhAJ1Vwh2wvRa/vYa3AoGAeq0Qj1A75nqb+9Zp6j2A +94WztQW3HSOXF/by4/Y2yYNe474x8YKshp9busXoHTNsL+jPsSvfBRw7zF4m4F4q +Jvztun0wodzXtMXZUdVjCSWx7MpXzS7WnuZHrhHu3zFys9n6UTD/jLVKsYQUhr+Q +EmVI0Q2BxMRGm7+/xWKs/YcCgYEAnc4iqNPIPXzTAquT4mshvSgeq7mI9+B55673 +Ui00yAM9WPWSjXT0LNw3ti5oFQ+owB9EutPLp2zAgWkScV+YCKNDG7PQEARSMGPQ +/eFcEOaclJCiNpWp5RK5KEt+GsOitABhp34QiBCvd7NWcy8oDUYVC0yEVbuGGa1f +Ow3Od+cCgYEA9G7ZGzkA5pNKE0fKzdmN4+oPYB8BCnSPKf6z2Xvu8hDR4CuSlbXN +Nps4zrhs8v4u+2J+IXOgRgKJd+Culg4AdY5hcSrdbWOmebxWVEC+VzaXvTQTUF62 +hSmlSD/hyKIxKMGbx6h74gQ86d7NgPHVefZPrYiAXPXHAj79WKA23LA= +-----END RSA PRIVATE KEY----- diff --git a/pp_p12/AGDRA_UAT.p12 b/pp_p12/AGDRA_UAT.p12 new file mode 100644 index 0000000000000000000000000000000000000000..4c7290bd841c6c55abdbf68e2727a2ec2ccaa4ba GIT binary patch literal 3029 zcmY+FcQhM}zs8e@Afd}vGpL}A*t6A2?YCl&wnk9ARJBG$TS4qqO6|SJ8`P*>F;msl z-lIjSBGgK4Zr^k6y}x_^_@3`MpXZ$C&*y_8z=l9TIurqx0%4K}(+S&W0Wtt{39tw- z0T%KH2cifN#s5T*Tml5~2Z?}yfIpA#KM4@U3xWQ312YhUx&UUhQ;^kvg8GmH0x<#t z3G`buPP5d*>ZD#~P@;^dU9&@(yUDMxPSMH0txvmc@_ccv1`XYLey8XX=#onw+q?uI zfUuf1b#|Ng7*PwT?+^*!fkF0PhYG=58&73TmRS#pOstwB{zxoOtMDyKtecGfX7Msj z2pRQ$p88Yj$}?N){WaE5%e z;p1Qfn}Yd+*0jf@pBU~W-som*=J*)FN0Op{t9IQ z!6xjXnk6rRFA{M=zTBh%KZoAE^F7O7exi$gS7YQz_8Ufx3WXU|-TL3bW`l*W`ZmLN zf~9u`d@aOdCU_GN69+Rx2xmK!)GwR$i^ltcsnuj0970*+NXQsOafZCay<2yTKxYg{ z1)~I6i@W>*AyXHdRyz|7d9iH5-Y>+Lc7Xj}_Bgt7R{*kZ2{F}qkWR*J`|1zu3yB!# z=Semz>l{Dd=sC^``p!`sUV!t15$uJ3<7*o|Br@?So@D#tb=1*WvuVEO3DsWiaMhCi zLtW6b%XJ8O%odI+YYmE#f=`T$G5(BvkbKeGf2iu4&+SfkZK%VRWcIq1fZLfw2ke_V z6sW6Q?dCb!Do@9;IuSnErp@=piOJv%N4fm=v=x%JQZ!h`7G@9$=SsuUw*4zulq$4^ zN}QHNSkMJGobb?ZiX5B^t2OPtmQ~p|J~~yGOO{psGXAakG4aGi?eTqwA99z57{zYk z6cb~|M5P6Nd4L)1nFYfiBVl)+Cu6b*KV_P_SblBtbEwGiYm}s@bX;BW$ba=?PqF*9 zvz;-K&XnL4LHVwbruUW2m zwbe^=I>X-D_ z?G+u1xHCEUkDFJsscDXL>W%d%ft^1o_}jU^?Mh1Zqj^htQkXGg?Kb~$(T=5jrm#Vc zoUg<|&)z!vh@#yA7q3C~Z~6|xmbc^8hCnY!D=GNh#2xN$zqPGpcz%?lUQU+07MN+d z#oAw_du`(~=LP-e4W)0|x3IfC>GjzKM)R)e-fb~y2cmx)gZn@>S2WM;A~aD3<`r4~ObdC979Z3vHy;nTCa>M#jTE(waS^{$5m_q^iJbMF%CrYlmaB`I9bW&-)&d z8FL&j8d9xbP28N=Tqlv8jUC=snj_AFto?cQK7{evkmX6$fAn+|zl<6kh>{Sz3Q|;S zY2JD$E1K7lZ^VCg9-h6fyxG@A;oB=IO!PL2pVgnX0TtGZ1T^l(9n?JJ7?s?WiW4ti zJX|?+@pn7u>IUveddsqx&~D#t8om;ONkLrWH*ba+)bYyb(W;AQz9;2WP);M8o+0<& z*Gk!s#D}+4!=JQBdVj0bc-_SKp5Nc9T+|!eGlGX8k~fvko>_Lx`MNoVd$HspG`h?X z;4(jg6(v-KgPa)~NqQ}~{ZUW50Zt0R6hf>o@i9!B>s9kUxkrxDY*Ewa5&TSIQsYi# z_6kzu$x(ZHU%!Xu#3T&s>qcTw!Np>$}7|55?ww@ZVTYs7r^1>OLTVzRRpp@^G+}SCwmWgN0kA z`FU#F&hpm9o$4$2A6c=WsP)lRw|(hm;p^x2zXNY3J{(T1?4dicRas)IS@3gCkL){x zh=5OZKWGTwP@`{lR9cjuRTkjIcRYPR79M!^h6t&gM!F_7XexDc$4C1$x@aDiS7g|? zhe%8}=6Wtn=UA`f=CBlxOYHri_37!GY;r5b30$pMm6e4DvPDx3x#`3MajT4qu`swD z#kf4`Yl&84bU>Y3`_#=B4GzB^4Bxlmsv?yfM7NfACm;lt>7T1ISUfA_^IG!%$#5yN*{_s5oWi>kF+1gihkS*G;p};0J24gwK*cGJUi0F zPxCvJ1r{-$FZ8IaG>oPeHx9MjyXg@v?(}qd0l&0x&Vcc)dU$c#5_k4o%XFO#XyBQ& z3y;;Pl0%`sl*S}*cwdv%dAN}&-LD)mU2=m*xfcHU;?BaONT~?GMp~9M9ombw_qjL% zShUSmZyPVB0*f8}XwlD%eNz9GOS)bzoOVp70=@CH%;ANy?w49JeCs5`!xtJ#XG61n zqVxN4<|8Wes1Y`jspa0x$~wQmr#xn7#alyrhk5Irvi|TEQy1E1Rzg%8ea}DUaak!N zwMr8spA%0kxN3A-jJpRgFDj#qov%j>G9KQIzAxG1iZGh7oPfva)%kv%efBJaO(NMn zQe-1`gponZLu8|ta#g7)Rm&*u0t%_FjS24Nda!{$EzS-&drIwSG`zZeQ!tvjV8&Ff zStv6N3`zmjorE_2x=t!imel<@zqBNMwc2be8y zt?tZ+)x0}4T{9(}$+$-)(6|aEjS@mJLFgqf(1Cd90bsUp)382PW}nP!{32@zUeS*3 U%yvAO5sG4XIYn!|_wP#n7XtQ>?EnA( literal 0 HcmV?d00001 diff --git a/pp_p12/AGDRA_UAT.pem b/pp_p12/AGDRA_UAT.pem new file mode 100644 index 0000000..eb8226e --- /dev/null +++ b/pp_p12/AGDRA_UAT.pem @@ -0,0 +1,36 @@ +Bag Attributes + localKeyID: A1 EA B4 FE 75 13 56 C4 8D 9A 45 97 9A 09 52 C5 3A 80 52 AF +subject=/CN=KioskAPI ASIA-SHARED-PROD-UMS CRXUATTLE (CHG0110705)/O=Playtech Estonia/OU=Infra Operations/C=EE/ST=Tartumaa/L=Tartu/DC=2228591 +issuer=/CN=Playtech Production API Auth CA - G1/OU=Security/O=Playtech PLC/C=IM +-----BEGIN CERTIFICATE----- +MIIFjDCCBHSgAwIBAgIINW/4hQUOxmkwDQYJKoZIhvcNAQELBQAwZjEtMCsGA1UE +AwwkUGxheXRlY2ggUHJvZHVjdGlvbiBBUEkgQXV0aCBDQSAtIEcxMREwDwYDVQQL +DAhTZWN1cml0eTEVMBMGA1UECgwMUGxheXRlY2ggUExDMQswCQYDVQQGEwJJTTAe +Fw0yNDA0MzAwMDAwMDBaFw0yNjAxMDUxMDAwMDBaMIG+MT0wOwYDVQQDDDRLaW9z +a0FQSSBBU0lBLVNIQVJFRC1QUk9ELVVNUyBDUlhVQVRUTEUgKENIRzAxMTA3MDUp +MRkwFwYDVQQKDBBQbGF5dGVjaCBFc3RvbmlhMRkwFwYDVQQLDBBJbmZyYSBPcGVy +YXRpb25zMQswCQYDVQQGEwJFRTERMA8GA1UECAwIVGFydHVtYWExDjAMBgNVBAcM +BVRhcnR1MRcwFQYKCZImiZPyLGQBGRYHMjIyODU5MTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAMl98z9Dp6ro0GKAp1zK9fHzZ4oKjzX1uaN1Hmnz5W5P +ftojVr63YyG7zsZxwO5HGuj31LVnMLNx6xZrdCrHwUW4Soeyn9c+nNPlNk7aTJfd +t54c3xS06wdt/Y6AMLAZ5EYxIXKlqmFmVxJ4S6IR+MdXgmLlhUAdnVjCcWhkWsGv +pZSfXq5MmFis8giJEgQLQP38TQ+Eqge1n7V86zxX/c9T/dp5vIiohCZucTjNeG/G +7AHsq7E3Fy34B+DRwczkoIVnhpQywxfwqa2tXAecy+iY0vHRBhydVymcSYMCJUzi ++kOTuRJYQk+EJwYS8RRwQvtpJrYGkR2Ucq3J15YlP+kCAwEAAaOCAeMwggHfMA4G +A1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAjAdBgNVHQ4EFgQUxW8U +91f9h5D0CJ89mAQ7STEigjQwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQbE05j +cuUE9DORnQEwzjPKZ8dAoDCCAWgGA1UdHwSCAV8wggFbMIG4oEqgSIZGaHR0cDov +L3BraS5pbmZyYS5wdGVjL2NybC9QbGF5dGVjaF9Qcm9kdWN0aW9uX0FQSV9BdXRo +X0NBXy1fRzEuY3JsLmRlcqJqpGgwZjEtMCsGA1UEAwwkUGxheXRlY2ggUHJvZHVj +dGlvbiBBUEkgQXV0aCBDQSAtIEcxMREwDwYDVQQLDAhTZWN1cml0eTEVMBMGA1UE +CgwMUGxheXRlY2ggUExDMQswCQYDVQQGEwJJTTCBnaCBmqCBl4aBlGxkYXA6Ly9w +cm9kbGRhcC5pbmZyYS5wdGVjOjM4OS9jbj1QbGF5dGVjaCUyMFByb2R1Y3Rpb24l +MjBBUEklMjBBdXRoJTIwQ0ElMjAtJTIwRzEsb3U9Q1JMLG91PVBLSSxkYz1wbGF5 +dGVjaCxkYz1jb20/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5hcnkwDQYJ +KoZIhvcNAQELBQADggEBABozAUwJAIKNrjh/ZMjyq52u346zDjLP4imY+1ZGRPJG +8SY2GYosPOIpfYdFJ3UatC/EsNwr9XsKUsJ5MD0SjNgx3MgyPjCBWw6xunn1E9WX +OquLn74t49NP+He/oDTWGImWeaHIJcMwgU6TD6/ZPUuUhdeZCjDMYmJUuxmrZkL1 +iNSu1jMqcIHCtuiKDbluuaUQtk+5eUFilJnJIQUVqqBr/XXG7GfQ6fq/c1GjJNqM +mgfEJEwPWdjeS5ynBSCE0AnocziyKpJg4RXPiXKgDVDfAscgF93JmnEIYYDtm+oU +0XhJZg1dKZtpOAM2IfCndP8VKHY0RTD2QZDg56p+9Kc= +-----END CERTIFICATE----- diff --git a/pp_p12/AGDRA_UAT.pw b/pp_p12/AGDRA_UAT.pw new file mode 100644 index 0000000..eb8270f --- /dev/null +++ b/pp_p12/AGDRA_UAT.pw @@ -0,0 +1 @@ +A6ZCfYoycq5tDa5p \ No newline at end of file