Google Chrome 证书相关

最近已经全部迁移到Ubuntu上工作了,公司的证书导入到Firefox上是可以了,但是chrome还不行,研究了一下。原来狗狗这个东西,是没有自己的证书管理工具的,借用nss的。这里记录一下相关的关键点。

  在ubuntu上应该有装两个包nss-tools的包和curl的包(不明白curl这样的基础包为啥不是默认装的,估计是ubuntu假设的用户群是比较那个的)

mllm © 2004-2010, allblue
sudo apt-get install libnss3-tools
sudo apt-get install curl
Parsed in 0.009 seconds

要增加CA证书,如下操作

mllm © 2004-2010, allblue
curl -k -o "cacert-root.crt"   "http://www.cacert.org/certs/root.crt"
curl -k -o "cacert-class3.crt" "http://www.cacert.org/certs/class3.crt"
certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "CAcert.org" -i cacert-root.crt 
certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "CAcert.org Class 3" -i cacert-class3.crt
Parsed in 0.01 seconds

自验证的证书,有两种方法导入

第一种pem文件,如用firefox导出,然后导入

mllm © 2004-2010, allblue
certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "A Name" -i a.pem
Parsed in 0.009 seconds

第二种,直接用脚本从http流中抓取证书保存

先建立一个如下的脚本

import-cert.sh
#!/bin/sh
#
# usage:  import-cert.sh remote.host.name [port]
#
REMHOST=$1
REMPORT=${2:-443}
exec 6>&1
exec > $REMHOST
echo | openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "$REMHOST" -i $REMHOST 
exec 1>&6 6>&-
Parsed in 0.01 seconds

然后执行脚本就能直接保存一个站点的证书到nss的数据库中

mllm © 2004-2010, allblue
import-cert.sh abc.sslserver.com 1234
Parsed in 0.008 seconds

查看已导入的证书

mllm © 2004-2010, allblue
certutil -L -d sql:$HOME/.pki/nssdb
Parsed in 0.008 seconds

删除已存在的一个证书

mllm © 2004-2010, allblue
certutil -D -n <the name> -d sql:$HOME/.pki/nssdb
Parsed in 0.009 seconds

导入一个证书

mllm © 2004-2010, allblue
certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "CA-Name" -i abc.sslserver.com
Parsed in 0.009 seconds

导入一个PKCS12类型的个人证书和私钥

mllm © 2004-2010, allblue
pk12util -d sql:$HOME/.pki/nssdb -i PrivateKey.pfx
Parsed in 0.008 seconds

最后增加选项才能使chrome启动客户端证书验证

mllm © 2004-2010, allblue
google-chrome --auto-ssl-client-auth
Parsed in 0.009 seconds