0

証明書の処理に取り組んでいるアプリケーションがあり、ラップトップでローカルに JUnit テストを実行するとコードが正しく動作するという問題が発生していますが、実際にコードをサーバーにデプロイすると、例外。String に格納されている RSA 公開鍵から PublicKey を作成しているときに、例外が発生しています。サーバーでは失敗するが、Junitでは機能する理由を誰かが教えてくれることを願っています。

私の RSA 公開鍵:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvNEz3+TStAAndHTc1qwT
NGvZYyB7DD1FshQf+mbQUGJ9HccOXNn5oHB7fWQjODjlDrYyCs7FclSMTLxA3lHX
98QWeWHL2O8t8qrJQQEUWZITmr/ddiNJOOvMeYF0K5if4m84vjgx/pTwwAVyU0Yo
MMXPnRozO8o7zSyRsH4jixALDugrsveEjLQI/cIEFvNjqlhyfumHyJKywNkMH1oJ
4e/f89FkpeDV694lsLs1jguuLLnvroXYJ5Uzeos+F0Pj1zFDUvhWrjVwxsUfAxS8
5uFGTUm6EEl9XiKwi+mgg8ODrY5dh3uE2yKB2T1Qj8BfK55zB8cYbORSsm6/f6Bi
BwIDAQAB
-----END PUBLIC KEY-----

私の Junit コード: <- ラップトップから動作

@Test
public void testkey() throws Exception {
    String pem = "-----BEGIN PUBLIC KEY-----"+
                "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvNEz3+TStAAndHTc1qwT"+
                "NGvZYyB7DD1FshQf+mbQUGJ9HccOXNn5oHB7fWQjODjlDrYyCs7FclSMTLxA3lHX"+
                "98QWeWHL2O8t8qrJQQEUWZITmr/ddiNJOOvMeYF0K5if4m84vjgx/pTwwAVyU0Yo"+
        "MMXPnRozO8o7zSyRsH4jixALDugrsveEjLQI/cIEFvNjqlhyfumHyJKywNkMH1oJ"+
        "4e/f89FkpeDV694lsLs1jguuLLnvroXYJ5Uzeos+F0Pj1zFDUvhWrjVwxsUfAxS8"+
        "5uFGTUm6EEl9XiKwi+mgg8ODrY5dh3uE2yKB2T1Qj8BfK55zB8cYbORSsm6/f6Bi"+
        "BwIDAQAB"+
        "-----END PUBLIC KEY-----";
    PublicKey willNotWork = decodeKey(pem); 
}

私の実際のコード:<-サーバーで実行すると例外がスローされます

@Override
public PublicKey getKey() {
    PublicKey pk = null;
     try {
        String crt =  "-----BEGIN PUBLIC KEY-----"+
                "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvNEz3+TStAAndHTc1qwT"+
                "NGvZYyB7DD1FshQf+mbQUGJ9HccOXNn5oHB7fWQjODjlDrYyCs7FclSMTLxA3lHX"+
                "98QWeWHL2O8t8qrJQQEUWZITmr/ddiNJOOvMeYF0K5if4m84vjgx/pTwwAVyU0Yo"+
                "MMXPnRozO8o7zSyRsH4jixALDugrsveEjLQI/cIEFvNjqlhyfumHyJKywNkMH1oJ"+
        "4e/f89FkpeDV694lsLs1jguuLLnvroXYJ5Uzeos+F0Pj1zFDUvhWrjVwxsUfAxS8"+
        "5uFGTUm6EEl9XiKwi+mgg8ODrY5dh3uE2yKB2T1Qj8BfK55zB8cYbORSsm6/f6Bi"+
        "BwIDAQAB"+
        "-----END PUBLIC KEY-----";
        System.out.append("crt == " + crt);
        pk = decodeKey(crt);
    }  catch(Exception ex){
        System.out.println("getKey caught: " + ex.getMessage()); 
    }  
    return pk;
}

デコードキーコード:

public PublicKey decodeKey(String text) throws CryptographyException {
    String content = text;
    if( text.contains("-----BEGIN PUBLIC KEY-----") ) {
      content = text.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "");
    }
    if( text.contains("-----BEGIN RSA PUBLIC KEY-----") ) {
      content = text.replace("-----BEGIN RSA PUBLIC KEY-----", "").replace("-----END RSA PUBLIC KEY-----", "");
    }
    byte[] der = Base64.decodeBase64(content);
    return decodeDerKey(der);
}

public PublicKey decodeDerKey(byte[] publicKeyBytes) throws CryptographyException {
   try {
      KeyFactory factory = KeyFactory.getInstance("RSA"); 
      PublicKey publicKey  = factory.generatePublic(
                                 new X509EncodedKeySpec(publicKeyBytes)); 
      return publicKey;
    }
    catch(Exception e) {
        throw new CryptographyException(e);
    }
}

サーバーでコードを実行するとスローされる例外は次のとおりです。

Could not parse certificate: java.io.IOException: DerInputStream.getLength():
lengthTag=111, too big`

したがって、ラップトップとサーバーの間には何らかの違いがあるはずだと推測しています。どちらも基本的に同じバージョンの Java ("1.7.0_17") を実行していることを確認しました。のプロバイダーも確認しましたがKeyFactory、それらも同じです。では、ここからどこを見ればよいのでしょうか。

4

0 に答える 0