web-dev-qa-db-ja.com

Yubikey NEO(または一般的なOpenPGPカードやGnuPG)を使用してX.509 CSRに署名する方法

Yubikey NEOは、3つの2048ビットRSAキーを備えたOpenPGPカード( こちら を参照)として使用できるため、その公開キーの1つからCAを作成することを考えました。秘密キーは抽出できないため(少なくともその記事によると、とにかくそれを最初に使用する目的です)、openssl ca -inkey ...を使用して証明書要求に署名することはできません。

有効な証明書用に署名される文字列を手動で生成し、gpg(Yubikey NEOを使用できる)を使用してこれを行う前に、より簡単な方法があります。 gpgsmまたは別のopensslパラメータを介して?

10
Tobias Kienzler

GnuPG 2.1.0beta2は、バッチモードでの証明書への署名をサポートしています。

X.509証明書の作成をサポートします。

「gpgsm --genkey」を使用すると、新しいプロンプトを介して自己署名証明書を作成できます。

「gpgsm --genkey --batch」を使用すると、パラメーターファイルで制御される任意の証明書を作成できるようになります。パラメータファイルの例は次のとおりです。

Key-Type: RSA
Key-Length: 1024
Key-Grip: 2C50DC6101C10C9C643E315FE3EADCCBC24F4BEA
Key-Usage: sign, encrypt
Serial: random
Name-DN: CN=some test key
Name-Email: [email protected]
Name-Email: [email protected]
Hash-Algo: SHA384
not-after: 2038-01-16 12:44

これにより、キーグリップで指定されたキーを使用し、ハッシュアルゴリズムとしてSHA-384を使用して、自己署名X.509証明書が作成されます。キーワードsigning-keyを使用して、別の鍵で証明書に署名できます。詳細については、sm/certreggen.cを参照してください。

(ソース: コミットメッセージ 、また [〜#〜]ニュース[〜#〜]


私はそれを機能させました、ここに含まれるステップがあります(あなたの生産システムではこれを行わないでください!

  • Libksba> = 1.3が必要です(それを取得 ここ
  • ftp://ftp.gnupg.org/gcrypt/gnupg/unstable/ から2.1ベータ3を入手する
  • 署名に使用する鍵を作成します(実際のアプリケーションではOpen PGPカード/ Yubikeo NEOを離れることのないCA鍵です)-パスワードを使用する場合(これを本番環境で引き続き使用する場合に推奨) 、コンソールなしで動作するようにpinentryを設定する必要があることを忘れないでください。つまり、グラフィカルなものを使用するか、screenを使用して、GPG_TTYを他のttyに設定します。 pinentry-cursesを使用します(メモ:プロンプトが表示されたら、Enterキーを1回押して実際にアクティブにし、パスフレーズをクリアテキストコマンドとして使用しないでください...)
  • 証明書に使用するキーを作成します(gpgsmを使用して他のCSRに署名できるかどうかはわかりません。その場合は、おそらく公開キーを抽出する必要があります)。
  • (私はCAの1つのメインキーと証明書のサブキーを使用しました)
  • キーグリップを取得する:~/.gnupg/private-keys-v1.dのファイル名を確認して作成日から推定するか、gpg2 -K --with-key-dataを実行して、キーID(フィンガープリント全体ではなく、何らかの方法で分割されている)を含む行を検索しますアップしてスクランブルをかけます)grp:::で始まる次の行を確認してください
  • 次のバッチ入力で自己署名CA証明書を作成します。
Key-Type: RSA
Key-Grip: E9CE7D421500AD119A4E308BC34317710AA2D57F #(replace with CA keygrip)
Key-Usage: cert
Serial: random
Name-DN: CN=Test Root CA
Hash-Algo: SHA512
not-after: 2038-01-16 12:44

gpgsm --gen-key --batch --output CA.crt < batchinputfileを実行します

  • 次のバッチ入力で署名付き証明書を作成します。
Key-Type: RSA
Key-Grip: E308BC34317710AA2D57FE9CE7D421500AD119A4 #(replace with keygrip)
Key-Usage: sign, encrypt
Serial: random
Name-DN: CN=Tester
Issuer-DN: CN=Test Root CA
Hash-Algo: SHA512
not-after: 2038-01-16 12:44
Signing-Key: E9CE7D421500AD119A4E308BC34317710AA2D57F #(replace with CA keygrip)
Authority-Key-Id: E9CE7D421500AD119A4E308BC34317710AA2D57F #(replace with CA keygrip)

gpgsm --gen-key --batch --output cert.crt < batchinputfileを実行します

可能なバッチパラメータの詳細については、 こちら(不完全なドキュメント) および certreqgen.c ;を参照してください。また、basicConstraintsを介してExtensionを手動で含める必要があります。これは、発行元DNを指定した場合、デフォルトで省略されます。これは、ソース で確認できます

8
Tobias Kienzler

OpenSSLは理論的には特定の engine add-on を通じてPKCS#11モジュールを使用できます。しかし YubiKey用のPKCS#11モジュールはまだありません があります。このコメントは、「 scute 」と呼ばれるものをほのめかしています。これは、GnuPGをラップするPKCS#11モジュールのようです-そのため、mayYubiKeyのOpenPGP実装と互換性がある。

3
Tom Leek