2013-03-26 82 views
0

背景:導出SSL證書在Linux的瀏覽器(或Linux命令行)爲Java證書信任庫

我有一些麻煩費時使用ColdFusion 9 Web服務(對未通過身份驗證)。我想去嘗試importing the cert into ColdFusion's underlying Java keystore。如果這不起作用,我會嘗試fiddle with ColdFusion's security provider

但我的問題是更具體的...

問:

如何導出證書(在適當的水平)在Chrome(或Linux CLI),並以哪種方式?

詳細

我已經看到了從瀏覽器導出證書一些指令,但他們已經爲IE(舊版本,在那個),我寧願使用Chrome,因爲我在Linux上。

爲了得到屏幕截圖,下面,我:

  • 按一下旁邊的鎖圖標URL
  • 「連接」選項卡(顯示「該網站的身份已被證實Thawte的SSL CA「)
  • 點擊 」證書信息鏈接「
  • 」詳細信息「 選項卡

Screen Shot of Chrome's Certificate Export Dialog

從那裏,我能夠在以下4種之一出口:

  • 內建對象令牌:Thawte完美服務器CA
  • Thawte的主要根CA
  • Thawte的SSL CA
  • SB1。 geolearning.com

哪一個比較合適?

另外,Adobe's documentation表示「證書必須是可分辨編碼規則(DER)格式的X.509證書。」,而Chrome的出口對話框提供下列選項:

  • Base64編碼ASCII,單一證書
  • Base64編碼ASCII,證書鏈
  • DER編碼二進制,單一證書
  • PKCS#7,單一證書
  • PKCS#7,證書鏈
  • 所有文件

我假設「DER編碼二進制,單個證書」是合適的?

回答

1

用瀏覽器

下產生的,我是能夠使用密鑰工具導入證書:

  • 等級:sb1.geolearning.com
  • 文件類型:DER編碼二進制,單一證書

對於後人,這裏是用來導入命令:

sudo keytool -import -keystore /opt/jrun4/jre/lib/security/cacerts -alias "sb1.geolearning.com (Thawte SSL CA)" -storepass changeit -noprompt -trustcacerts -file ~/Downloads/sb1.geolearning.com 

沒有瀏覽器

下面是我在做什麼,這些天(在流浪供應方)。在這個腳本中,密鑰庫是硬編碼的,因爲我現在只用於Lucee;然而,密鑰庫的路徑可以很容易地被參數化。此外,runfile相關的代碼就是這樣,Vagrant不會多次運行該腳本;如果你不使用代碼作爲流浪者配置器,那麼這些代碼就是多餘的。

真正與上述解決方案區別的唯一一件事是,它通過openssl s_client(並通過sed清除它)通過瀏覽器手動獲取證書。

#!/usr/bin/env bash 
set -e 

description="Add cert to Lucee's keystore." 

while : 
do 
    case $1 in 
     --provisioned-dir=*) 
      provisioned_dir=${1#*=}  # Delete everything up till "=" 
      shift 
      ;; 
     --runfile-name=*) 
      runfile_name=${1#*=}  # Delete everything up till "=" 
      shift 
      ;; 
     --site-host-name=*) 
      site_host_name=${1#*=}  # Delete everything up till "=" 
      shift 
      ;; 
     -*) 
      echo "WARN: Unknown option (ignored): $1" >&2 
      shift 
      ;; 
     *) # no more options. Stop while loop 
      break 
      ;; 
    esac 
done 

runfile="${provisioned_dir}/${runfile_name}" 

if [ -f "${runfile}" ]; then 
    echo "${description}: Already run." 
    exit 0 
fi 

echo "add cert to keystore" 

echo -n | \ 
    openssl s_client -connect ${site_host_name}:443 \ 
    | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \ 
    > /tmp/${site_host_name}.cert 

/opt/lucee/jdk/jre/bin/keytool \ 
    -import \ 
    -keystore /opt/lucee/lib/lucee-server/context/security/cacerts \ 
    -alias "${site_host_name} (self-signed)" \ 
    -storepass changeit \ 
    -file /tmp/${site_host_name}.cert \ 
    -noprompt \ 
    || true 

touch "${runfile}"