Özel Anahtar Parola pkcs12 konteynerinden nasıl kaldırılır?


40
  1. Chrome'un SSL / export komutunu kullanarak sertifika aldım.
  2. Daha sonra openvpn - openvpn için config içinde girdi olarak sağlandı:
    pkcs12 "path/to/pkcs12_container"
  3. Arama yaparken openvpn ~/openvp_configözel anahtar için bir şifre ister (Chrome kullanarak dışa aktarırken girdiğim):
    Enter Private Key Password:...
  4. Bu şifre isteğini kaldırmak istiyorum.

Soru: pkcs12'den özel anahtarın şifresini nasıl kaldırırım?

Yani, şifre gerektirmeyen pkcs12 dosyası oluşturun.

(Görünüşe göre bir şekilde bunu bir yıl önce yaptım ve şimdi unuttum.


Aşağıdaki komut dosyası bunu yapar (aslında sıfır0 cevaptır): gist.github.com/5nizza/7ae9cff0d43f33818a33 kullanımı:./remove_pass_from_cert.sh YourCertName YourCertPass
Ayrat

Yanıtlar:


48

Çeşitli opensslçağrılarla elde edilebilir .

  • ŞİFRE mevcut şifrenizdir
  • YourPKCSFile dönüştürmek istediğiniz dosyadır
  • NewPKCSWithoutPassphraseFile, parola olmadan PKCS12 için hedef dosyadır

İlk önce sertifikayı çıkarın:

$ openssl pkcs12 -clcerts -nokeys -in "YourPKCSFile" \
      -out certificate.crt -password pass:PASSWORD -passin pass:PASSWORD

İkincisi, CA anahtarı:

$ openssl pkcs12 -cacerts -nokeys -in "YourPKCSFile" \
      -out ca-cert.ca -password pass:PASSWORD -passin pass:PASSWORD

Şimdi, özel anahtar:

$ openssl pkcs12 -nocerts -in "YourPKCSFile" \
      -out private.key -password pass:PASSWORD -passin pass:PASSWORD \
      -passout pass:TemporaryPassword

Şimdi şifreyi kaldırın:

$ openssl rsa -in private.key -out "NewKeyFile.key" \
      -passin pass:TemporaryPassword

Yeni PKCS Dosyası için bir şeyler koyun:

$ cat "NewKeyFile.key"  \
      "certificate.crt" \
      "ca-cert.ca" > PEM.pem

Ve yeni dosyayı oluşturun:

$ openssl pkcs12 -export -nodes -CAfile ca-cert.ca \
      -in PEM.pem -out "NewPKCSWithoutPassphraseFile"

Artık özel anahtar kısmında parola olmadan yeni bir PKCS12 anahtar dosyanız var.


harika cevap! .. nedir ca-cert.ca?
Ayrat

@Ayrat: Bu, anahtarınızın CA sertifikası parçasıdır. - Cevabında bir yazım hatası var, düzeltti ... - denedikten sonra yanıtı oy vermekten ve kabul etmekten çekinmeyin :-)
zero0

2
-nodeskullanıldığında göz ardı edilir -export, bu durum için belgelenmez (bkz. openssl man sayfasına, -nodesyalnızca PKCS # 12'den PEM'e aktarırken listelenir). Son aramanız hala bir ihracat şifresi istiyor. Ve sadece dönüş isabet edersem, şifresi boş bir dize olan ve şifresi olmayan bir PKCS # 12 dosyası alıyorum. O zaman yaptığımda openssl pkcs12 -in "NewPKCSWithoutPassphraseFile"hala bir ithalat şifresi ister. İadeyi vurabilirim ve işe yarıyor ama eğer şifre olmasaydı bile sormazdı.
Mecki

35

En basit çözüm buldum olduğunu

Geçici pem dosyasına aktar

openssl pkcs12 -in protected.p12 -nodes -out temp.pem
#  -> Enter password

Pem'i p12'ye geri çevir

openssl pkcs12 -export -in temp.pem  -out unprotected.p12
# -> Just press [return] twice for no password

Geçici sertifikayı kaldır

rm temp.pem

Bu yaklaşımın bir dezavantajı göremiyorum.
Matt Beckman

Bazı araçlar şifre gerektirir. Örneğin keytool -v -list -storetype pkcs12 -keystore unprotected.p12, bir uyarı yayar ve sertifika listelenmez. Bu yüzden OpenVPN için işe yarayabilir, fakat başka bir şey için olmayabilir.
mivk

@mivk ne demek istiyorsun? Bazı araçların şifre korumalı bir anahtar gerektirdiğini mi?
Koen.

1
Elbette, ancak soru, şifreyi kaldırmakla ilgili değil, şifre gerektiren uygulamalarla ilgili değil.
Koen.

2
Çözümünüz, PKCS # 12 şifresi olmadan bir şifre oluşturmaz, fakat "" (emtpy string) şifresiyle aynı değildir.
Mecki

5

Bu geçici dosya olmadan tek adımda kolayca yapılabilir:

openssl pkcs12 -in "PKCSFile" -nodes | openssl pkcs12 -export -out "PKCSFile-Nopass"

Parola İçe Aktar komut istemini parola ile yanıtlayın. İhracat Pasajı komut istemlerini <CR> ile yanıtlayın

Bitti.

Bunun, pakette olabilecek herhangi bir sayıda ara sertifikayı ele aldığına dikkat edin ...

Elde edilen dosyaya dikkat etmenizi şiddetle tavsiye ederim; umask'ı ilk olarak 377'ye ayarlamak iyi bir fikir olurdu (unix değil: bu, yalnızca sahibinin oluşturulan dosyayı okuyabileceği anlamına gelir.) Sanırım varsayılan umask'ınız izin veriyorsa 2 adım ...


2

Şimdi, özel anahtar:

openssl pkcs12 -nocerts -in "YourPKCSFile" -out private.key -password pass:PASSWORD -passin pass:PASSWORD -passout pass:TemporaryPassword

Şimdi parolayı kaldır:

openssl rsa -in private.key -out "NewKeyFile.key" -passin pass:TemporaryPassword

2 adım değiştirilebilir.

openssl pkcs12 -nocerts -in "YourPKCSFile" -out private.key -nodes

0

Bunların hiçbiri benim için çalıştı. Sonunda ilk defa çalışan dotNet koduna geri döndüm.

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;
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.