【问题标题】:Exporting SSL Certificate in Linux Browser (or Linux Command Line) for Java Certificate Truststore在 Linux 浏览器(或 Linux 命令行)中为 Java 证书信任库导出 SSL 证书
【发布时间】:2013-03-26 19:00:11
【问题描述】:

背景:

我在使用 ColdFusion 9 的 Web 服务时遇到了一些问题(对等体未通过身份验证)。

首先,我要试试importing the cert into ColdFusion's underlying Java keystore。如果这不起作用,我将尝试fiddle with ColdFusion's security provider

但我的问题更具体...

问题:

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

详情

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

为了获得屏幕截图,我:

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

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

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

哪个合适?

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

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

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

【问题讨论】:

    标签: java ssl coldfusion-9 keytool truststore


    【解决方案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}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 2012-04-12
      • 2012-12-27
      • 2013-05-11
      相关资源
      最近更新 更多