pkcs12 "path/to/pkcs12_container"
openvpn ~/openvp_config
он запрашивает пароль для закрытого ключа (который я ввел при экспорте с использованием Chrome):Enter Private Key Password:...
Вопрос: как убрать пароль на приватный ключ с pkcs12?
То есть создайте файл pkcs12, который не требует пароля.
(кажется, я уже как-то так год назад делал, а сейчас забыл, черт возьми.)
Это может быть достигнуто различными 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-файла:
$ 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
Это можно легко сделать за один шаг без временного файла:
openssl pkcs12 -in "PKCSFile" -nodes | openssl pkcs12 -export -out "PKCSFile-Nopass"
Ответьте на запрос «Импорт пароля» с паролем. Ответьте на запросы Export Passowrd с помощью <CR>
Готово.
Обратите внимание, что это обрабатывает любое количество промежуточных сертификатов, которые могут быть в пакете ...
Настоятельно рекомендую позаботиться о получившемся файле; Было бы неплохо сначала установить umask равным 377 (не-unix: это означает, что только владелец может читать созданный файл). Я полагаю, что это 2 шага, если ваша umask по умолчанию разрешающая ...
Теперь закрытый ключ:
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, System.Security.Cryptography.X509Certificates.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;
}
}