Skip to main content

このバージョンの GitHub Enterprise サーバーはこの日付をもって終了となりました: 2024-03-26. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise サーバーにアップグレードしてください。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせください

REST API のシークレットの暗号化

REST API を使ってシークレットを作成または更新するには、シークレットの値を暗号化する必要があります。

シークレットの暗号化について

いくつかの REST API エンドポイントを使うと、GitHub でシークレットを作成できます。 これらのエンドポイントを使うには、libsodium を使ってシークレット値を暗号化する必要があります。 詳しくは、libsodium のドキュメントを参照してください。

シークレットを暗号化するには、Base64 でエンコードされた公開キーが必要です。 REST API から公開キーを取得できます。 公開キーの取得に使うエンドポイントを確認するには、シークレットの作成に使うエンドポイントの encrypted_value パラメーターのドキュメントを参照してください。

Node.js を使ってシークレットを暗号化する例

Node.js を使う場合は、libsodium-wrappers ライブラリを使ってシークレットを暗号化できます。 詳しくは、「libsodium-wrappers」を参照してください。

次の例では、YOUR_SECRET を暗号化するプレーンテキスト値に置き換えてください。 YOUR_BASE64_KEY を Base64 でエンコードされた公開キーに置き換えてください。 シークレットの作成に使うエンドポイントのドキュメントには、公開キーの取得に使用できるエンドポイントが記載されています。 ORIGINAL はプレースホルダーではありません。これは libsodium-wrappers ライブラリのパラメーターです。

JavaScript
const sodium = require('libsodium-wrappers')

const secret = 'YOUR_SECRET'
const key = 'YOUR_BASE64_KEY'

//Check if libsodium is ready and then proceed.
sodium.ready.then(() => {
  // Convert the secret and key to a Uint8Array.
  let binkey = sodium.from_base64(key, sodium.base64_variants.ORIGINAL)
  let binsec = sodium.from_string(secret)

  // Encrypt the secret using libsodium
  let encBytes = sodium.crypto_box_seal(binsec, binkey)

  // Convert the encrypted Uint8Array to Base64
  let output = sodium.to_base64(encBytes, sodium.base64_variants.ORIGINAL)

  // Print the output
  console.log(output)
});

Python を使ってシークレットを暗号化する例

Python 3 を使う場合は、PyNaCl ライブラリを使ってシークレットを暗号化できます。 詳しくは、PyNaCl を参照してください。

次の例では、YOUR_SECRET を暗号化するプレーンテキスト値に置き換えてください。 YOUR_BASE64_KEY を Base64 でエンコードされた公開キーに置き換えてください。 シークレットの作成に使うエンドポイントのドキュメントには、公開キーの取得に使用できるエンドポイントが記載されています。

Python
from base64 import b64encode
from nacl import encoding, public

def encrypt(public_key: str, secret_value: str) -> str:
  """Encrypt a Unicode string using the public key."""
  public_key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder())
  sealed_box = public.SealedBox(public_key)
  encrypted = sealed_box.encrypt(secret_value.encode("utf-8"))
  return b64encode(encrypted).decode("utf-8")

encrypt("YOUR_BASE64_KEY", "YOUR_SECRET")

C# を使ってシークレットを暗号化する例

C# を使う場合は、Sodium.Core パッケージを使ってシークレットを暗号化できます。 詳しくは、「Sodium.Core」を参照してください。

次の例では、YOUR_SECRET を暗号化するプレーンテキスト値に置き換えてください。 YOUR_BASE64_KEY を Base64 でエンコードされた公開キーに置き換えてください。 シークレットの作成に使うエンドポイントのドキュメントには、公開キーの取得に使用できるエンドポイントが記載されています。

C#
var secretValue = System.Text.Encoding.UTF8.GetBytes("YOUR_SECRET");
var publicKey = Convert.FromBase64String("YOUR_BASE64_KEY");

var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey);

Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox));

Ruby を使ってシークレットを暗号化する例

Ruby を使う場合は、RbNaCl gem を使ってシークレットを暗号化できます。 詳しくは、RbNaCl に関するページを参照してください。

次の例では、YOUR_SECRET を暗号化するプレーンテキスト値に置き換えてください。 YOUR_BASE64_KEY を Base64 でエンコードされた公開キーに置き換えてください。 シークレットの作成に使うエンドポイントのドキュメントには、公開キーの取得に使用できるエンドポイントが記載されています。

Ruby
require "rbnacl"
require "base64"

key = Base64.decode64("YOUR_BASE64_KEY")
public_key = RbNaCl::PublicKey.new(key)

box = RbNaCl::Boxes::Sealed.from_public_key(public_key)
encrypted_secret = box.encrypt("YOUR_SECRET")

# Print the base64 encoded secret
puts Base64.strict_encode64(encrypted_secret)