2017-04-17 2 views
0

2つの分散サービス間で認証方法を理解しようとしています。JWTトークンのプライベート/パブリックキー暗号化にX509証明書を使用する方法(作成する)

1人のホストが侵害されると、すべてのホストが侵害されるため、すべてのサービスホストに共有秘密を配布したくないです。

だから私のシナリオは次のとおりです。Aは、ホストBの公開鍵は

  • ホストAがホストB's公開鍵
  • ホストBを使ってJWTをエンコードし、encryptes知っ

    • ホストその秘密鍵を使ってjwtを受信し、それを解読します。

    ホセ・JWTパッケージ: https://github.com/dvsekhvalnov/jose-jwt

    は私には良いオプションのように思えます。 jwtの署名のほかに、私的/公開鍵を使った暗号化もサポートしています。次の符号化のための例とがあるページで

    JWTをデコード:

    エンコード:

    var publicKey=new X509Certificate2("my-key.p12", "password").PublicKey.Key as RSACryptoServiceProvider; 
    
    string token = Jose.JWT.Encode(payload, publicKey, JweAlgorithm.RSA_OAEP, JweEncryption.A256GCM); 
    

    デコード:

    var privateKey=new X509Certificate2("my-key.p12", "password", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet).PrivateKey as RSACryptoServiceProvider; 
    
    string json = Jose.JWT.Decode(token,privateKey); 
    

    今、ここに私が理解していないものです:

    • どのように私は(JWTをエンコードするホスト/サービスA用)の公開鍵の情報が含まれていた.p12証明書ファイルを作成することができますか?
    • ..公開鍵と秘密鍵情報(jwtをデコードするホスト/サービスB)の両方を含む.p12証明書ファイルを作成するにはどうすればよいですか?

    私が行ったすべての研究から、私は、両方を含む.p12ファイルか、公開鍵だけを含む.p12ファイルのどちらかを作成できるという印象を受けます。しかし、2つの.p12ファイルを作成する方法はありません。一方は情報と公開鍵の両方を持ちます。私は何が欠けていますか?

    ご回答ありがとうございます。

  • 答えて

    0

    通常、PKCS12/PFXはパブリック専用ではありませんが、必要に応じて実行できます。

    cert.HasPrivateKeytrueであると仮定すると:cert.Export(X509ContentType.Pkcs12, somePassword)は、あなたが「publicAndPrivate.p12」(または何でも)に書き込むことができますbyte[]が生成されます。

    通常、パブリックオンリー証明書では、X.509データ(DERバイナリまたはPEM-DERエンコード)のように書き留めます。 .NETはPEM-DERを簡単にしませんので、DERバイナリを使用します。そのデータはcert.RawDataまたはcert.Export(X509ContentType.Cert)のいずれかで取得できます(このエクスポートフォームにはランダムなデータがないため、どちらも同じ結果になります)。 (publicOnly.cer)

    場合本当にはちょうど公開証明書を持っているPKCS12ブロブをしたい:

    using (X509Certificate2 publicOnly = new X509Certificate2(publicPrivate.RawData)) 
    { 
        return publicOnly.Export(X509ContentType.Pkcs12, somePassword); 
    } 
    

    結果byte[]が、その後publicOnly.p12である可能性があります。

    関連する問題