美文网首页Linux中国::开源热点 Linux中国::技术专栏
自己成为一个证书颁发机构(CA)

自己成为一个证书颁发机构(CA)

作者: Linux技术 | 来源:发表于2019-05-31 21:20 被阅读19次

为你的微服务架构或者集成测试创建一个简单的内部 CA。

传输层安全(TLS)模型(有时也称它的旧名称 SSL)基于 证书颁发机构(certificate authoritie)(CA)的概念。这些机构受到浏览器和操作系统的信任,从而签名服务器的的证书以用于验证其所有权。

但是,对于内部网络,微服务架构或集成测试,有时候本地 CA更有用:一个只在内部受信任的 CA,然后签名本地服务器的证书。

这对集成测试特别有意义。获取证书可能会带来负担,因为这会占用服务器几分钟。但是在代码中使用“忽略证书”可能会被引入到生产环境,从而导致安全灾难。

CA 证书与常规服务器证书没有太大区别。重要的是它被本地代码信任。例如,在 Python requests 库中,可以通过将 REQUESTS_CA_BUNDLE 变量设置为包含此证书的目录来完成。

在为集成测试创建证书的例子中,不需要长期的证书:如果你的集成测试需要超过一天,那么你应该已经测试失败了。

因此,计算昨天明天作为有效期间隔:

>>> import datetime 

>>> one_day = datetime.timedelta(days=1) 

>>> today = datetime.date.today() 

>>> yesterday = today - one_day 

>>> tomorrow = today - one_day

现在你已准备好创建一个简单的 CA 证书。你需要生成私钥,创建公钥,设置 CA 的“参数”,然后自签名证书:CA 证书总是自签名的。最后,导出证书文件以及私钥文件。

from cryptography.hazmat.primitives.asymmetric import rsa 

from cryptography.hazmat.primitives import hashes, serialization 

from cryptography import x509 

from cryptography.x509.oid import NameOID 

private_key = rsa.generate_private_key( 

public_exponent=65537, 

key_size=2048, 

backend=default_backend() 

public_key = private_key.public_key() 

builder = x509.CertificateBuilder() 

builder = builder.subject_name(x509.Name([ 

x509.NameAttribute(NameOID.COMMON_NAME, 'Simple Test CA'), 

])) 

builder = builder.issuer_name(x509.Name([ 

x509.NameAttribute(NameOID.COMMON_NAME, 'Simple Test CA'), 

])) 

builder = builder.not_valid_before(yesterday) 

builder = builder.not_valid_after(tomorrow) 

builder = builder.serial_number(x509.random_serial_number()) 

builder = builder.public_key(public_key) 

builder = builder.add_extension( 

x509.BasicConstraints(ca=True, path_length=None), 

critical=True) 

certificate = builder.sign( 

private_key=private_key, algorithm=hashes.SHA256(), 

backend=default_backend() 

private_bytes = private_key.private_bytes( 

encoding=serialization.Encoding.PEM, 

format=serialization.PrivateFormat.TraditionalOpenSSL, 

encryption_algorithm=serialization.NoEncrption()) 

public_bytes = certificate.public_bytes( 

encoding=serialization.Encoding.PEM) 

with open("ca.pem", "wb") as fout: 

fout.write(private_bytes + public_bytes) 

with open("ca.crt", "wb") as fout: 

fout.write(public_bytes)

通常,真正的 CA 会需要证书签名请求(CSR)来签名证书。但是,当你是自己的 CA 时,你可以制定自己的规则!可以径直签名你想要的内容。

继续集成测试的例子,你可以创建私钥并立即签名相应的公钥。注意 COMMON_NAME 需要是 https URL 中的“服务器名称”。如果你已配置名称查询,你需要服务器能响应对 service.test.local 的请求。

service_private_key = rsa.generate_private_key( 

public_exponent=65537, 

key_size=2048, 

backend=default_backend() 

service_public_key = service_private_key.public_key() 

builder = x509.CertificateBuilder() 

builder = builder.subject_name(x509.Name([ 

x509.NameAttribute(NameOID.COMMON_NAME, 'service.test.local') 

])) 

builder = builder.not_valid_before(yesterday) 

builder = builder.not_valid_after(tomorrow) 

builder = builder.public_key(public_key) 

certificate = builder.sign( 

private_key=private_key, algorithm=hashes.SHA256(), 

backend=default_backend() 

private_bytes = service_private_key.private_bytes( 

encoding=serialization.Encoding.PEM, 

format=serialization.PrivateFormat.TraditionalOpenSSL, 

encryption_algorithm=serialization.NoEncrption()) 

public_bytes = certificate.public_bytes( 

encoding=serialization.Encoding.PEM) 

with open("service.pem", "wb") as fout: 

fout.write(private_bytes + public_bytes)

现在 service.pem 文件有一个私钥和一个“有效”的证书:它已由本地的 CA 签名。该文件的格式可以给 Nginx、HAProxy 或大多数其他 HTTPS 服务器使用。

通过将此逻辑用在测试脚本中,只要客户端配置信任该 CA,那么就可以轻松创建看起来真实的 HTTPS 服务器。

via: https://opensource.com/article/19/4/certificate-authority

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关文章

  • 讲清楚charles抓包原理

    基础概念 1. CA CA是证书颁发机构,不是随便什么人都能成为证书颁发机构,关键是你颁发的证书要别人认可。别人认...

  • 申请SSL证书CA机构的选择很重要

    SSL证书是由CA机构审核之后颁发的,全球大大小小的颁发SSL证书的CA机构非常多,如何选择靠谱合适的CA机构对于...

  • 使用Let's Encrypt轻松实现站点https

    大家知道https的站点,都是需要CA机构来颁发证书的。如果不是CA机构颁发的证书,在使用浏览器浏览的时候会报证书...

  • 自己成为一个证书颁发机构(CA)

    为你的微服务架构或者集成测试创建一个简单的内部 CA。 传输层安全(TLS)模型(有时也称它的旧名称 SSL)基于...

  • Buypass Go SSL 免费SSL证书提供商

    Buypass AS是ETSI认证的证书颁发机构(CA) ,根据PKI标准颁发SSL证书、企业证书和个人 ID 。...

  • 本地环境配置https

    前言 开发项目免不了本地配置https环境,本文将介绍自己创建证书颁发机构(CA),为自己的本地开发环境颁发证书因...

  • ES集群设置用户名密码登录

    1、生成CA证书 在Elasticsearch集群中验证证书真实性的推荐方法是信任签署证书的证书颁发机构(CA)。...

  • SSL 证书链及 Web 服务器配置

    一、什么是 SSL 证书链 有两种类型的证书颁发机构(CA):根 CA 和中间 CA。如果想让一个设备信任一个证书...

  • CA证书制作实战

    需求:自建CA 颁发证书,使用自签名证书来构建安全网络,所谓自签名证书,就是自己扮演 CA 机构,自 己给自己的服...

  • 设置DNS CAA记录,防止HTTPS证书错误签发

    ​全球约有上百个证书颁发机构(CA)有权发放HTTPS证书,证明您网站的身份。CAA标准使得网站可以将指定CA机构...

网友评论

    本文标题:自己成为一个证书颁发机构(CA)

    本文链接:https://www.haomeiwen.com/subject/dbhntctx.html