2013-03-26 80 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}"