pkcs12 "path/to/pkcs12_container"
openvpn ~/openvp_config
を呼び出すと、秘密鍵のパスワードを要求されます(Chromeを使用してエクスポートするときに入力したものです)。Enter Private Key Password:...
質問:pkcs12から秘密鍵のパスワードを削除する方法?
つまり、パスワードを必要としないpkcs12ファイルを作成します。
(私は何とかこれを1年前にすでにやったようですが、今ではそれを忘れています。
さまざまなopenssl
呼び出しによって実現できます。
まず、証明書を抽出します。
$ openssl pkcs12 -clcerts -nokeys -in "YourPKCSFile" \
-out certificate.crt -password pass:PASSWORD -passin pass:PASSWORD
次に、CAキー:
$ openssl pkcs12 -cacerts -nokeys -in "YourPKCSFile" \
-out ca-cert.ca -password pass:PASSWORD -passin pass:PASSWORD
さて、秘密鍵:
$ openssl pkcs12 -nocerts -in "YourPKCSFile" \
-out private.key -password pass:PASSWORD -passin pass:PASSWORD \
-passout pass:TemporaryPassword
次に、パスフレーズを削除します。
$ openssl rsa -in private.key -out "NewKeyFile.key" \
-passin pass:TemporaryPassword
新しいPKCS-Fileを作成します。
$ cat "NewKeyFile.key" \
"certificate.crt" \
"ca-cert.ca" > PEM.pem
そして、新しいファイルを作成します。
$ openssl pkcs12 -export -nodes -CAfile ca-cert.ca \
-in PEM.pem -out "NewPKCSWithoutPassphraseFile"
これで、秘密鍵部分にパスフレーズのない新しいPKCS12鍵ファイルができました。
最も簡単な解決策 私が見つけた は
openssl pkcs12 -in protected.p12 -nodes -out temp.pem
# -> Enter password
openssl pkcs12 -export -in temp.pem -out unprotected.p12
# -> Just press [return] twice for no password
rm temp.pem
これは、一時ファイルなしで1つのステップで簡単に実行できます。
openssl pkcs12 -in "PKCSFile" -nodes | openssl pkcs12 -export -out "PKCSFile-Nopass"
インポートパスワードプロンプトにパスワードを入力します。 <CR>でExport Passowrdプロンプトに応答します
できました。
これは、バンドルに含まれる可能性がある任意の数の中間証明書を処理することに注意してください...
結果のファイルに注意することを強くお勧めします。最初にumaskを377に設定することをお勧めします(非UNIX:これは、作成されたファイルを所有者だけが読み取ることができることを意味します。)デフォルトのumaskが許容範囲内であれば、それは2つのステップだと思います...
さて、秘密鍵:
openssl pkcs12 -nocerts -in "YourPKCSFile" -out private.key -password pass:PASSWORD -passin pass:PASSWORD -passout pass:TemporaryPassword
ここでパスフレーズを削除します。
openssl rsa -in private.key -out "NewKeyFile.key" -passin pass:TemporaryPassword
2つのステップは、
openssl pkcs12 -nocerts -in "YourPKCSFile" -out private.key -nodes
これらのどれも私にはうまくいきませんでした。最後に、私は初めて動作するdotNetコードに戻しました。
class Script
{
static public void Main(string[] args)
{
if (args.Length < 3 || args.Contains("/?"))
{
MainHelp(args);
return;
}
string _infile = args[0],
_outfile = args[2];
string _password = args[1], _outpassword = (args.Length > 3) ? args[3] : "";
Console.WriteLine(String.Format("{0} -> {1} with ({2} -> {3})", _infile, _outfile, _password, _outpassword));
System.Security.Cryptography.X509Certificates.X509Certificate2 cert = null;
Console.WriteLine(String.Format("Load {0} with {2}", _infile, _outfile, _password, _outpassword));
cert = new System.Security.Cryptography.X509Certificates.X509Certificate2(_infile, _password, X509KeyStorageFlags.Exportable);
Console.WriteLine(String.Format("Export {1} with {3}", _infile, _outfile, _password, _outpassword));
System.IO.File.WriteAllBytes(_outfile, cert.Export(System.Security.Cryptography.X509Certificates.X509ContentType.Pfx, _outpassword));
Console.WriteLine(String.Format("Export complete", _infile, _outfile, _password, _outpassword));
}
static public void MainHelp(string[] args)
{
Console.WriteLine("Usage pfxremovepwd [inpfx] [inpwd] [outpfx] [optional outpwd]");
return;
}
}