web-gelistirme-sc.com

Kendinden imzalı bir sertifikayı varsayılan olarak tüm Java uygulamalarında bulunan Java anahtar deposuna nasıl içe aktarırım?

Kendinden imzalı bir sertifikayı Java içine almak istiyorum, böylece SSL bağlantısı kurmaya çalışacak herhangi bir Java uygulaması bu sertifikaya güvenecektir.

Şimdiye kadar içeri aktarmayı başardım.

_keytool -import -trustcacerts -noprompt -storepass changeit -alias $REMHOST -file $REMHOST.pem
keytool -import -trustcacerts -noprompt -keystore cacerts -storepass changeit -alias $REMHOST -file $REMHOST.pem
_

Yine de, koşmaya çalıştığımda HTTPSClient.class Hala alıyorum:

javax.net.ssl.SSLHandshakeException: Sun.security.validator.ValidatorException: PKIX yolu oluşturma işlemi başarısız oldu: Sun.security.provider.certpath.SunCertPathBuilderException: istenen hedefe yönelik geçerli sertifika yolu bulunamadı
130
sorin

Windows'ta en kolay yol programı kullanmaktır portecle .

  1. Portecle'ı indirin ve yükleyin.
  2. Öncelikle, programınızı çalıştırmak için hangi JRE veya JDK'nın kullanıldığını bildiğinizden% 100 emin olun. 64 bit Windows 7'de oldukça az sayıda JRE olabilir. İşlem Gezgini bu konuda size yardımcı olabilir veya kullanabilirsiniz: System.out.println(System.getProperty("Java.home"));
  3. Java_HOME\lib\security\cacerts dosyasını başka bir klasöre kopyalayın.
  4. Portecle'da Dosya> Anahtar Deposu Dosyasını Aç'ı tıklayın.
  5. Cacerts dosyasını seç
  6. Bu şifreyi girin: changeit
  7. Araçlar> Güvenilir Sertifika Al'ı tıklayın.
  8. Mycertificate.pem dosyasına göz atın
  9. İçe Aktar'ı tıklayın
  10. Güven yolu ile ilgili uyarı için Tamam'ı tıklayın.
  11. Sertifika hakkındaki ayrıntıları görüntülediğinde Tamam'ı tıklayın.
  12. Sertifikayı güvenilir olarak kabul etmek için Evet'i tıklayın.
  13. Bir takma ad istediğinde, Tamam'ı tıklayın ve sertifikayı aldığını söylediğinde tekrar Tamam'ı tıklayın.
  14. Kaydet düğmesine tıklayın. Bunu unutma veya değişiklik atılır.
  15. Dosya önbelleklerini bulduğunuz yere geri kopyalayın.

Linux'ta:

SSL sertifikasını zaten bu şekilde kullanan bir web sunucusundan indirebilirsiniz:

$ echo -n | openssl s_client -connect www.example.com:443 | \
   sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/examplecert.crt

İsteğe bağlı olarak sertifika bilgilerini doğrulayın:

$ openssl x509 -in /tmp/examplecert.crt -text

Sertifikayı Java cacerts anahtar deposuna aktarın:

$ keytool -import -trustcacerts -keystore /opt/Java/jre/lib/security/cacerts \
   -storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt

Düzenle:

Bu günlerde, anahtar deposuna genellikle bir sertifika eklemek zorunda değiliz, çünkü ssls.com adresinden yılda 5 ABD Doları karşılığında sertifika alabilirsiniz. Sadece bu senin için bir seçenek durumunda.

210
Sarel Botha
    D:\Java\jdk1.5.0_10\bin\keytool -import -file "D:\Certificates\SDS services\Dev\dev-sdsservices-was8.infavig.com.cer" -keystore "D:\Java\jdk1.5.0_10\jre\lib\security\cacerts" -alias "sds certificate"
33
Vikky

Sertifikaları anahtar sahiplerine ekleyen küçük bir komut dosyası yazdım, bu yüzden kullanımı çok daha kolay.

En son sürümü https://github.com/ssbarnea/keytool-trust adresinden alabilirsiniz.

#!/bin/bash
# version 1.0
# https://github.com/ssbarnea/keytool-trust
REMHOST=$1
REMPORT=${2:-443}

KEYSTORE_PASS=changeit
KEYTOOL="Sudo keytool"

# /etc/Java-6-Sun/security/cacerts

for CACERTS in  /usr/lib/jvm/Java-8-Oracle/jre/lib/security/cacerts \
    /usr/lib/jvm/Java-7-Oracle/jre/lib/security/cacerts \
    "/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts" \
    "/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/Java/lib/security/cacerts"
do

if [ -e "$CACERTS" ]
then
    echo --- Adding certs to $CACERTS

# FYI: the default keystore is located in ~/.keystore

if [ -z "$REMHOST" ]
    then
    echo "ERROR: Please specify the server name to import the certificatin from, eventually followed by the port number, if other than 443."
    exit 1
    fi

set -e

rm -f $REMHOST:$REMPORT.pem

if openssl s_client -connect $REMHOST:$REMPORT 1>/tmp/keytool_stdout 2>/tmp/output </dev/null
        then
        :
        else
        cat /tmp/keytool_stdout
        cat /tmp/output
        exit 1
        fi

if sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' </tmp/keytool_stdout > /tmp/$REMHOST:$REMPORT.pem
        then
        :
        else
        echo "ERROR: Unable to extract the certificate from $REMHOST:$REMPORT ($?)"
        cat /tmp/output
        fi

if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT >/dev/null
    then
    echo "Key of $REMHOST already found, skipping it."
    else
    $KEYTOOL -import -trustcacerts -noprompt -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
    fi

if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -keystore "$CACERTS" >/dev/null
    then
    echo "Key of $REMHOST already found in cacerts, skipping it."
    else
    $KEYTOOL -import -trustcacerts -noprompt -keystore "$CACERTS" -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
    fi

fi

done

`

32
sorin

Bu benim için çalıştı. :)

 Sudo keytool -importcert -dosyaadı.cer -alias randomaliasname -keystore $ Java_HOME/jre/lib/security/cacerts -storeepass değişikliği 
13
Walk

Sertifika Yetkilisi tarafından imzalanmış bir sertifikayı varsayılan olarak Java cacerts dosyasında bulunmuyorsa, HTTPS bağlantıları için aşağıdaki yapılandırmayı tamamlamanız gerekir. Sertifikaları önbelleklere aktarmak için:

  1. Windows Gezgini'ni açın ve AX Core Client'ın kurulu olduğu jre\lib\security alt klasöründe bulunan cacerts dosyasına gidin. Varsayılan konum şudur: C:\Program Files\ACL Yazılımı\AX Core Client\jre\lib\security
  2. Herhangi bir değişiklik yapmadan önce dosyanın yedek kopyasını oluşturun.
  3. Kullanmakta olduğunuz Sertifika Makamından aldığınız sertifikalara bağlı olarak, ara bir sertifikayı ve/veya kök sertifikayı cacerts dosyasına almanız gerekebilir. Sertifikaları almak için aşağıdaki sözdizimini kullanın: keytool -import -alias -keystore -trustcacerts -file
  4. Her iki sertifikayı da içe aktarıyorsanız, her sertifika için belirtilen diğer adın benzersiz olması gerekir.
  5. Anahtar deposunun şifresini "Şifre" İsteminde girin ve Enter tuşuna basın. Önbellek dosyası için varsayılan Java şifresi “changeit” dir. “Bu sertifikaya güvenilsin mi?” Sorusuna ‘y’ yazın ve 'Enter' tuşuna basın.
4
Bharat Darakh

'Keytool' basit komutu Windows ve/veya Cygwin ile de çalışır.

Cygwin kullanıyorsanız işte "S.Botha'nın" cevabının altından kullandığım değiştirilmiş komut:

  1. kullanacağınız JDK içindeki JRE'yi tanımladığınızdan emin olun.
  2. Prompt/cygwin'inizi yönetici olarak başlatın
  3. bu JDK'nin bin dizinine girin, örn. cd/cygdrive/c/Program\Dosyalar/Java/jdk1.8.0_121/jre/bin
  4. Keytool komutunu, içinden yeni Cert'inize giden yolu sağladığınız şekilde uygulayın:

    ./keytool.exe -import -trustcacerts -keystore ../lib/security/cacerts  -storepass changeit -noprompt -alias myownaliasformysystem -file "D:\Stuff\saved-certs\ca.cert"
    

Dikkat, çünkü bu Cygwin'in altındaysa, Cygwin'e ait olmayan bir programa yol veriyorsunuzdur, bu yüzden yol DOS benzeri ve tırnak içindedir.

1
Jordan Gee

Denemek isteyebilir

keytool -import -trustcacerts -noprompt -keystore <full path to cacerts> -storepass changeit -alias $REMHOST -file $REMHOST.pem

dürüst olmak gerekirse, sadece cacerts yazarsanız, tam yolunu verirseniz, sertifikanızı nereye koyacağı hakkında hiçbir fikrim yok.

0
Gradient

sertifikayı Java linux içine kurun

/ opt/jdk (sürüm)/bin/keytool -import -alias aliasname -dosya sertifikası.cer -keystore cacerts -storepass şifresi

0
Apuri Srikanth