亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Scala 或 Java 將 .p12 轉換為 .pem 以在 AWS SNS 中注冊

使用 Scala 或 Java 將 .p12 轉換為 .pem 以在 AWS SNS 中注冊

繁星coding 2023-06-21 15:07:33
我正在嘗試在 SNS 中注冊我的移動應用程序。Amazon API 需要 .pem 格式的 APNS 證書及其密碼。我收到 p12 格式的證書二進制文件。我怎樣才能以正確的方式轉換它?或者我真的需要轉換它嗎?這就是我到目前為止所得到的:/** * @param principal For APNS, is certificate in .pem format. * @param credential For APNS, is private key. * @param platform APNS of FCM * @param appName the application name   */def registerApp(principal: String, credential: String, platform: String, appName: String): String = {val attributes = Map("PlatformPrincipal" -> principal, "PlatformCredential" -> credential)val map = mapAsJavaMap(attributes.asInstanceOf[util.Map[String, String]])val request = new CreatePlatformApplicationRequest()  .withPlatform(platform)  .withName(appName)  .withAttributes(map)amazonSNSClient.createPlatformApplicationAsync(request).get().getPlatformApplicationArn 我做了一些研究,但無法找到非常簡單的東西。我也無法使用控制臺keytool。我基本上需要的是實現這個的東西openssl pkcs12 -in myFile.p12 -out myFile.pem -nodes在 Java 的 Scala 中,但使用輸入二進制。
查看完整描述

3 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

您不需要 Bouncycastle 來讀取 PKCS12,基本的 Java 加密就可以做到這一點。Bouncycastle 確實提供了完整且(大部分)方便的 PEM 函數,基本的 Java 沒有這些函數,但是您在這里需要的特定函數并不難合成:


static void SO57695413PKCS12ToPEM (String[] args) throws Exception {

    KeyStore ks = KeyStore.getInstance("PKCS12"); 

    ks.load(new FileInputStream(args[0]), args[1].toCharArray());

    // should close but I'm being lazy here

    PrivateKey pkey = (PrivateKey) ks.getKey(args[2], args[1].toCharArray());

    Certificate cert = ks.getCertificate(args[2]);

    // or loop over/look at aliases if desired

    System.out.print("-----BEGIN PRIVATE KEY-----\r\n"

            + Base64.getMimeEncoder().encodeToString(pkey.getEncoded())

            + "\r\n-----END PRIVATE KEY-----\r\n");

    System.out.print("-----BEGIN CERTIFICATE-----\r\n"

            + Base64.getMimeEncoder().encodeToString(cert.getEncoded())

            + "\r\n-----END CERTIFICATE-----\r\n");

    // or put in a String etc as desired

}


查看完整回答
反對 回復 2023-06-21
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

我無法與 SNS 對話,或者如果您不需要轉換它,但就轉換它而言,我認為最好的方法是使用 OpenSSL。

查看完整回答
反對 回復 2023-06-21
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

我發現將 p12 的字節數組轉換為 pem 并獲取 PlatformPrincipal 和 PlatformCredential 進行注冊的解決方法:


def registerApnsApp(p12cert: Array[Byte], password: String, appName: String): Future[String] = {

  val p12 = fromP12(new ByteArrayInputStream(p12cert), password).get

  val attributes = Map("PlatformPrincipal" -> fromPem(p12.certificate), "PlatformCredential" -> fromPem(p12.privateKey))

  val attributesMap = mapAsJavaMap(attributes)


  val request = new CreatePlatformApplicationRequest()

    .withPlatform("APNS")

    .withName(appName)

    .withAttributes(attributesMap) 


    Future(amazonSnsClient.createPlatformApplicationAsync(request).get().getPlatformApplicationArn)

  }

獲取在 SNS 中用作 PlatformPrincipal 的證書以及 PlatformPrincipal 的密鑰。


 def fromP12(stream: InputStream, password: String): Option[Pkcs12] = {

   val pkcs12 = KeyStore.getInstance("pkcs12", new BouncyCastleProvider())

   pkcs12.load(stream, password.toCharArray)

   while(pkcs12.aliases().hasMoreElements) {

     val alias = pkcs12.aliases().nextElement()

     if (pkcs12.isKeyEntry(alias)) {

       val certificate = pkcs12.getCertificate(alias)

       val privateKey = pkcs12.getKey(alias, password.toCharArray).asInstanceOf[PrivateKey]

       if (privateKey != null && certificate != null) {

        Option(new Pkcs12(certificate, privateKey, alias))

       }

     }

   }

   None

  }

}


def fromPem(obj: Object): String = {

  val out = new StringWriter

  val pem = new PEMWriter(out)

  pem.writeObject(obj)

  pem.close()

  out.getBuffer.toString

}

需要重構/美化,但希望這能幫助某人正確轉換 p12 并注冊 APNS 應用程序。


使用了進口:


import java.io.{InputStream, StringWriter}

import java.security.{KeyStore, PrivateKey}

import java.security.cert.Certificate


import org.bouncycastle.jce.provider.BouncyCastleProvider

import org.bouncycastle.openssl.PEMWriter


查看完整回答
反對 回復 2023-06-21
  • 3 回答
  • 0 關注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號