2017-11-21 4 views
3

私はAWS Lambdaからキーペアを生成するときに奇妙なことに気付きました。コードを実行するたびに、同じキーが生成されます。私はラムダコンテナが呼び出されるたびに凍結されていることを認識しています。これはおそらく、基礎となるJCEクラスがメモリからロードされ、初期状態を維持する理由です。問題のコードは比較的簡単です:Lambdaは初期化後も同じ暗号鍵を生成するのはなぜですか?どのように修正するのですか?

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", "BC"); 
keyPairGen.initialize(2048); 
KeyPair keyPair = keyPairGen.generateKeyPair(); 
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic(); 
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate(); 

return new RSAKey.Builder(rsaPublicKey).privateKey(rsaPrivateKey) 
      .keyID(kid).keyUse(KeyUse.SIGNATURE) 

私はバニラプロバイダと弾む城の両方を試してみましたが、結果は同じである - ラムダは「暖かい」のときと同じキーのペア。コンテナが終了し、「コールド」状態から再起動されると、新しいキーセットが取得されます。

私もAWS Cognitoを使用しています。サービスはAPI GatewayとCloudFrontの両方で提供されています。

基本となるJCEクラスを "リフレッシュ"する方法はありますか?

+1

は 'keyPairGen.initialize(2048年、新しいのSecureRandom()い) '助け? – Bohemian

+0

残念ながら、それはしません。私はそれが私の認証セッションに関連していることに気付きました。そして、Cognitoからログアウトしてログインし直した後、生成された鍵ペアは異なります。何かがどこかにキャッシュされ、APIゲートウェイでキャッシングが確実にオフになっています。 – albogdano

+0

これは間違いなくCloudFrontです! – albogdano

答えて

0

私自身の質問に答えるために、犯人は実際にCloudFrontでした。 APIゲートウェイでAPIキャッシングをオフにしても、CloudFrontは依然としていくつかのAPIリクエストのレスポンスをキャッシュします。

誰かが同じ問題に遭遇した場合、解決策は、リクエストURLにクエリパラメータを追加することによって、「バスト」CloudFrontのキャッシュを、以下のとおりです。

GET /api/generateKeyPair?timestamp=1507843759370 
+1

作成するCloudFrontディストリビューションについては、アプリケーションに合わせてCloudFrontを正しく設定する必要があります。デフォルトの振る舞いは、 'Cache-Control'ヘッダなしで24時間応答をキャッシュすることです。 –

関連する問題