内容简介:基于 OpenSSL 自建 CA 和颁发 SSL 证书
自建 CA 颁发证书不仅可以用来鉴权,而且使你的通信更加的安全(请保护好你的证书)。在实际的软件开发中,越来越多的服务用到 HTTPS,证书的需求随之增加。那么对于我们开发者,通过自签名证书来进行测试必将非常的方便。so,有一个自己的 CA 是不是非常的库呢!下面我们一步步操作,创建我们自己的 CA。
由于 Mac 自带的 openssl 版本过低,请安装更高版本。
建立 CA 目录
所有命令均在同一目录执行,没有进行跳转。
$ mkdir -p ./demoCA/{private,newcerts} && \ touch ./demoCA/index.txt && \ touch ./demoCA/serial && \ echo 01 > ./demoCA/serial
通过以上命令,你将得到如下目录:
$ tree . └── demoCA ├── index.txt ├── newcerts ├── private └── serial
生成 CA 根密钥
$ openssl genrsa -des3 -out ./demoCA/private/cakey.pem 2048 #可以去掉des,以后签证书不用输密码
生成 CA 证书请求
$ openssl req -new -days 3650 -key ./demoCA/private/cakey.pem -out careq.pem
自签发 CA 根证书
$ openssl ca -selfsign -in careq.pem -out ./demoCA/cacert.pem
以上两步可以合二为一
$ openssl req -new -x509 -days 3650 -key ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem
到这里,我们已经有了自己的 CA 了,下面我们开始为用户颁发证书。
为用户颁发证书
生成用户 RSA 密钥
$ openssl genrsa -des3 -out userkey.pem 2048 # 4096
生成用户证书请求
$ openssl req -new -days 365 -key userkey.pem -out userreq.pem # NO SAN $ openssl req -new -days 365 -key userkey.pem -out userreq.pem -config openssl.cnf #SAN
使用 CA 签发证书
$ openssl ca -in userreq.pem -out usercert.pem # NO SAN $ openssl ca -in userreq.pem -out usercert.pem -config openssl.cnf -extensions v3_req #SAN
其他证书操作
-
查看证书的内容:
$ openssl x509 -in cert.pem -text -noout
-
吊销证书:
$ openssl ca -revoke cert.pem -config openssl.cnf
-
证书吊销列表:
$ openssl ca -gencrl -out cacert.crl -config openssl.cnf
-
查看列表内容:
$ openssl crl -in cacert.crl -text -noout
openssl.cnf
上面步骤中,你可以观察到 SAN
与 NO SAN
标记。那么什么是 SAN
,SAN(Subject Alternative Name)是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。所以,只执行 NO SAN
命令也可以签发证书,不过却不能够添加多个域名。
想要添加多个域名或泛域名,你需要使用到该扩展。那么默认的 OpenSSL 的配置是不能够满足的,我们需要复制或下载一份默认的 openssl.cnf 文件到本地。如 github openssl 。这里我已经准备好一份 openssl.cnf 。
修改匹配策略
默认匹配策略是:国家名,省份,组织名必须相同(match)。我们改为可选(optional),这样避免我们生成证书请求文件时(csr)去参考 CA 证书。
# For the CA policy [ policy_match ] countryName = match stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional
修改默认值
这是可选项,修改默认值,可以让你更快的颁发证书,一直回车就可以了:
[ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = CN countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Shanghai localityName = Locality Name (eg, city) localityName_default = Shanghai 0.organizationName = Organization Name (eg, company) 0.organizationName_default = deepzz # we can do this but it is not needed normally :-) #1.organizationName = Second Organization Name (eg, company) #1.organizationName_default = World Wide Web Pty Ltd organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = deepzz
关键步骤
最关键的地方是修改 v3_req
。添加成如下:
[ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [ alt_names ] DNS.1 = abc.com DNS.2 = *.abc.com DNS.3 = xyz.com IP.1 = 127.0.0.1
每次如果你要签发不同域名或 IP,可以直接修改 [ alt_names ]
。
注意之后的操作,均要指定 -config openssl.cnf
。
再来看看我们的目录结构:
$ tree . ├── demoCA │ ├── cacert.pem │ ├── index.txt │ ├── index.txt.attr │ ├── index.txt.attr.old │ ├── index.txt.old │ ├── newcerts │ │ └── 01.pem │ ├── private │ │ └── cakey.pem │ ├── serial │ └── serial.old ├── openssl.cnf ├── usercert.pem ├── userkey.pem └── userreq.pem
本文链接: https://deepzz.com/post/based-on-openssl-privateCA-issuer-cert.html , 参与评论 »
-- EOF --
发表于 2017-05-21 16:03:00 ,并被添加「openssl、ca」标签。
以上所述就是小编给大家介绍的《基于 OpenSSL 自建 CA 和颁发 SSL 证书》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 应用 Flask 开发在线证书颁发系统
- 独领风骚,Let's Encrypt 是最受欢迎的 SSL 证书颁发机构
- RHCE证书,CCNA证书
- DV SSL证书和其他证书有什么不同?
- 生成根证书CA及签发子证书及配置站点实践
- OpenSSL命令速查手册:证书、私钥与证书签名请求文件
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
LINUX与UNIX Shell编程指南
David Tansley / 徐炎、张春萌 / 机械工业出版社 / 2000-6 / 38.00元
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。一起来看看 《LINUX与UNIX Shell编程指南》 这本书的介绍吧!