0

背景:

我在使用带有 ColdFusion 9 的 Web 服务时遇到了一些麻烦(对等体未经过身份验证)。

首先,我将尝试将证书导入 ColdFusion 的底层 Java 密钥库。如果这不起作用,我将尝试使用 ColdFusion 的安全提供程序

但我的问题更具体......

问题:

如何在 Chrome(或 Linux CLI)中导出证书(在正确的级别),以及以哪种格式?

细节

我已经看到了一些从浏览器导出证书的说明,但它们是针对 IE(旧版本)的,我更喜欢使用 Chrome,因为我在 Linux 上。

为了得到屏幕截图,下面,我:

  • 单击 URL 旁边的锁定图标
  • “连接”选项卡(显示“该网站的身份已通过 Thawte SSL CA 验证”)
  • 点击“证书信息链接”
  • “详细信息”选项卡

Chrome 证书导出对话框的屏幕截图

从那里,我可以在四个级别之一导出:

  • 内置对象令牌:Thawte Premium Server CA
  • 解冻主根 CA
  • 解冻 SSL CA
  • sb1.geolearning.com

哪一个合适?

此外,Adobe 的文档说“证书必须是可分辨编码规则 (DER) 格式的 X.509 证书。”,Chrome 的导出对话框提供以下选项:

  • Base64 编码的 ASCII,单一证书
  • Base64 编码的 ASCII,证书链
  • DER 编码的二进制、单一证书
  • PKCS #7,单一证书
  • PKCS #7,证书链
  • 所有文件

我假设“DER编码的二进制,单一证书”是合适的?

4

1 回答 1

1

使用浏览器

以下生成了一个我可以使用 keytool 导入的证书:

  • 级别: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

没有浏览器

这就是我这些天正在做的事情(在 Vagrant 供应商中)。在这个脚本中,密钥库是硬编码的,因为我现在只将它用于 Lucee;但是,密钥库的路径可以很容易地参数化。此外,runfile相关代码只是让 Vagrant 不会多次运行脚本;如果您不将代码用作 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}"
于 2013-03-26T22:11:16.703 回答