>source

Oracle Cloud Compute VM을 모니터링하기 위해 REST API를 사용하고 있습니다.

String privateKeyFilename = "/.oci/oci_api_key.pem";
PrivateKey privateKey = loadPrivateKey(privateKeyFilename);
RequestSigner signer = new RequestSigner(apiKey, privateKey);

loadPrivateKey (privateKeyFilename) 메소드는 다음과 같습니다.

private static PrivateKey loadPrivateKey(String privateKeyFilename) {
    try (InputStream privateKeyStream = Files.newInputStream(Paths.get(SystemUtils.getUserHome().toString() + privateKeyFilename))) {
        return PEM.readPrivateKey(privateKeyStream);
    } catch (InvalidKeySpecException e) {
        throw new RuntimeException("Invalid format for private key");
    } catch (IOException e) {
        throw new RuntimeException("Failed to load private key");
    }
}

oci_api_key.pem 파일 (샘플)은 다음과 같습니다.

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,93A2E22E154E2EBFE18D170E9E9D1772
xCpRUz2HCa9sd0inFN7BtFO/ZgQDlcieOriynSDGYBYXMO1JWpHtjbiEvt9FbdGk
INKzMQKeDbmG1PqW0Pzflla2IIpyZKEL85s/HpT/EM2qDkKZ15JostR2W1il+u1V
xCpRUz2HCa9sd0inFN7BtFO/ZgQDlcieOriynSDGYBYXMO1JWpHtjbiEvt9FbdGk
SampleSampleSampleSampleSampleSampleSampleSampleSampleSampleSamp
eB04BHrY9RTk2Oe6Bj5j9y0oCOcF0ScTSLRoA2z2PYTY0lacAiv7lq2fWq5/iVb1
KbNqIL7oMBn0oyFr2t9/STiHXU/F5gMbxqCN+A0F+S/Cdua5U5P1icnPF2f/RL32
cUrJM1soChcI1eJIDBlVsvOLOGEM761f5WYXIyMcM0fXi2nLpihrlh9yVU6El0Vq
+vPUlqLfxjlzOZgAjzSjsFSv0MBoSxeFM3zkGQs/OTkqHBVudJ1imoNAQXWRC50k
+OfItUAQmgIpvhQ3hCOXqnMXdgzVphjPS7J39nLSJRKXEKno3t4ahMkaHB6pFRun
hpNdlY3B+9h1iPh4Zxbr+3tIIDadQwV4Ic9JdtS+iUOQ4t/0zFcnMZ33lL81v+Fj
VOpMycKYkJVLVYyrq7gIxDjADR6BGWIJnuTeVyc8NQIBTUkrvYBlJkq5ro3p2jVg
Fh0Er0H1YxfkRTQR4uXWCv5GPIE+uMDHSb+JAvwYSsHQ0Vp+b3VKdkG4p7wgJeNS
7SODuznK2z8YcSiHz/SX7EKbx8kNCOODu/Tw4cav8GS9iUH5j7BRrePMFdQVv+bz
f9l1W429oro2Fxe/RdHzm7zliquiPE+/Wiw+sBIZfJFmwQS69aQOQeDawuHP6xBi
HOwF5Jqr15yTOxwRxmyGtOvj5M5x/uoPa4217fbfmyzc+XNxII4e6r95z3MGCZs0
hVIX4dAu37+i3cnJodWuqOn/it44OiHZbLM3pWGXNWb2BYCub/AUWxOQRfURGDDR
weU25EHFn3Xp5al4T8oHXaZBjJCBlVQ57A5YFX6CBsYRarVF7PJYycvRHa2eEM/y
ZTzDJjZZIaUu0rNPuNrTW7ZSH7mwq4ekCSRRbfyM05RkGWAhNiuXu2YWy7E07bMQ
5IIOdKXzx9FonECowWkAV1vDeesbVjxQTMdO82/dq5FjaErPTNji7RwS3izw9kiX
gcd00iltXKd6rUI8s1EwrFvEpURDcybVTi1D6PAZf25RjEF6MZAeNXKj7qPg3EDs
P4Rmi8y2pn93QHQfJxWI5aLmHP8ZCHrj8XRZFYrijOqM5y2DJBxTqIijd/S9197b
-----END RSA PRIVATE KEY-----

아래 예외가 발생합니다

Exception in thread "main" java.lang.IllegalArgumentException: java.io.IOException: Invalid DER: length field too big (186)
    at org.tomitribe.auth.signatures.RSA.privateKeyFromPKCS1(RSA.java:63)
    at org.tomitribe.auth.signatures.PEM.readPrivateKey(PEM.java:71)
    at com.zoho.listeners.Signing.loadPrivateKey(Signing.java:132)
    at com.zoho.listeners.Signing.main(Signing.java:86)
Caused by: java.io.IOException: Invalid DER: length field too big (186)
    at org.tomitribe.auth.signatures.RSA$DerParser.getLength(RSA.java:402)
    at org.tomitribe.auth.signatures.RSA$DerParser.read(RSA.java:358)
    at org.tomitribe.auth.signatures.RSA.newRSAPrivateCrtKeySpec(RSA.java:133)
    at org.tomitribe.auth.signatures.RSA.privateKeyFromPKCS1(RSA.java:59)
    ... 3 more

모든 입력이 있습니까?

  • 답변 # 1

    PEM 인증서 대신 DER로 인코딩 된 인증서를 기대하는 것 같습니다. 이 기사에서 발췌 한 다음 내용은 배경 지식을 제공해야합니다.

    X509 파일 확장자

    우리가 이해해야 할 첫 번째 것은 각 유형의 파일 확장자가 무엇인지입니다. DER, PEM, CRT 및 CER이 무엇인지에 대해 많은 혼란이 있으며 많은 사람들이 그들이 모두 상호 교환 가능하다고 잘못 말하고 있습니다. 어떤 경우에는 일부를 교환 할 수 있지만 가장 좋은 방법은 인증서의 인코딩 방식을 식별 한 후 올바르게 레이블을 지정하는 것입니다. 레이블이 올바르게 지정된 인증서는 훨씬 쉽게 조작 할 수 있습니다.

    인코딩 (확장자로도 사용)

    .DER = DER 확장은 이진 DER 인코딩 된 인증서에 사용됩니다. 이러한 파일은 CER 또는 CRT 확장자를 가질 수도 있습니다. 올바른 영어 사용법은"DER 인증서가 없습니다"가 아니라"DER 인코딩 된 인증서가 있습니다"입니다.

    .PEM = PEM 확장은"—– BEGIN…"줄이 앞에 붙은 ASCII (Base64) 기갑 데이터가 포함 된 여러 유형의 X.509v3 파일에 사용됩니다.

    공통 확장명

    .CRT = 인증서에 CRT 확장이 사용됩니다. 인증서는 이진 DER 또는 ASCII PEM으로 인코딩 될 수 있습니다. CER 및 CRT 확장은 거의 동의어입니다. * nix 시스템 중에서 가장 일반적입니다

    [...]

    openssl genrsa -out ~/.oci/oci_api_key.pem 2048 와 같은 키 만들기   -aes128 없이  가능한 해결책으로 제안되었습니다.

관련 자료

  • 이전 python - 현재 셀 값으로 정의 된 마지막 행을 찾는 가장 좋은 방법이 있습니까?
  • 다음 는 SQL을 생성하는 것은 위키의 PHP 프레임 워크에 참여