精华内容
下载资源
问答
  • 主代码: package rsaimport ( "crypto/rand" "crypto/rsa" "crypto/x509" "crypto/x509/pkix" "encoding/pem" "io/ioutil" "math/big" rd "math/rand" "os" "time" )func init
    主代码:
    package rsa
    
    import (
        "crypto/rand"
        "crypto/rsa"
        "crypto/x509"
        "crypto/x509/pkix"
        "encoding/pem"
        "io/ioutil"
        "math/big"
        rd "math/rand"
        "os"
        "time"
    )
    
    func init() {
        rd.Seed(time.Now().UnixNano())
    }
    
    type CertInformation struct {
        Country            []string
        Organization       []string
        OrganizationalUnit []string
        EmailAddress       []string
        Province           []string
        Locality           []string
        CommonName         string
        CrtName, KeyName   string
        IsCA               bool
        Names              []pkix.AttributeTypeAndValue
    }
    
    func CreateCRT(RootCa *x509.Certificate, RootKey *rsa.PrivateKey, info CertInformation) error {
        Crt := newCertificate(info)
        Key, err := rsa.GenerateKey(rand.Reader, 2048)
        if err != nil {
            return err
        }
    
        var buf []byte
        if RootCa == nil || RootKey == nil {
            //创建自签名证书
            buf, err = x509.CreateCertificate(rand.Reader, Crt, Crt, &Key.PublicKey, Key)
        } else {
            //使用根证书签名
            buf, err = x509.CreateCertificate(rand.Reader, Crt, RootCa, &Key.PublicKey, RootKey)
        }
        if err != nil {
            return err
        }
    
        err = write(info.CrtName, "CERTIFICATE", buf)
        if err != nil {
            return err
        }
    
        buf = x509.MarshalPKCS1PrivateKey(Key)
        return write(info.KeyName, "PRIVATE KEY", buf)
    }
    //编码写入文件
    func write(filename, Type string, p []byte) error {
        File, err := os.Create(filename)
        defer File.Close()
        if err != nil {
            return err
        }
        var b *pem.Block = &pem.Block{Bytes: p, Type: Type}
        return pem.Encode(File, b)
    }
    
    func Parse(crtPath, keyPath string) (rootcertificate *x509.Certificate, rootPrivateKey *rsa.PrivateKey, err error) {
        rootcertificate, err = ParseCrt(crtPath)
        if err != nil {
            return
        }
        rootPrivateKey, err = ParseKey(keyPath)
        return
    }
    
    func ParseCrt(path string) (*x509.Certificate, error) {
        buf, err := ioutil.ReadFile(path)
        if err != nil {
            return nil, err
        }
        p := &pem.Block{}
        p, buf = pem.Decode(buf)
        return x509.ParseCertificate(p.Bytes)
    }
    
    func ParseKey(path string) (*rsa.PrivateKey, error) {
        buf, err := ioutil.ReadFile(path)
        if err != nil {
            return nil, err
        }
        p, buf := pem.Decode(buf)
        return x509.ParsePKCS1PrivateKey(p.Bytes)
    }
    
    func newCertificate(info CertInformation) *x509.Certificate {
        return &x509.Certificate{
            SerialNumber: big.NewInt(rd.Int63()),
            Subject: pkix.Name{
                Country:            info.Country,
                Organization:       info.Organization,
                OrganizationalUnit: info.OrganizationalUnit,
                Province:           info.Province,
                CommonName:         info.CommonName,
                Locality:           info.Locality,
                ExtraNames:         info.Names,
            },
            NotBefore:             time.Now(),//证书的开始时间
            NotAfter:              time.Now().AddDate(20, 0, 0),//证书的结束时间
            BasicConstraintsValid: true, //基本的有效性约束
            IsCA:           info.IsCA,   //是否是根证书
            ExtKeyUsage:    []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth, x509.ExtKeyUsageServerAuth},    //证书用途
            KeyUsage:       x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
            EmailAddresses: info.EmailAddress,
        }
    }
    
    测试代码:
    package rsa
    
    import (
        "crypto/x509/pkix"
        "encoding/asn1"
        "os"
        "testing"
    )
    
    func Test_crt(t *testing.T) {
        baseinfo := CertInformation{Country: []string{"CN"}, Organization: []string{"WS"}, IsCA: true,
            OrganizationalUnit: []string{"work-stacks"}, EmailAddress: []string{"czxichen@163.com"},
            Locality: []string{"SuZhou"}, Province: []string{"JiangSu"}, CommonName: "Work-Stacks",
            CrtName: "test_root.crt", KeyName: "test_root.key"}
    
        err := CreateCRT(nil, nil, baseinfo)
        if err != nil {
            t.Log("Create crt error,Error info:", err)
            return
        }
        crtinfo := baseinfo
        crtinfo.IsCA = false
        crtinfo.CrtName = "test_server.crt"
        crtinfo.KeyName = "test_server.key"
        crtinfo.Names = []pkix.AttributeTypeAndValue{{asn1.ObjectIdentifier{2, 1, 3}, "MAC_ADDR"}} //添加扩展字段用来做自定义使用
    
        crt, pri, err := Parse(baseinfo.CrtName, baseinfo.KeyName)
        if err != nil {
            t.Log("Parse crt error,Error info:", err)
            return
        }
        err = CreateCRT(crt, pri, crtinfo)
        if err != nil {
            t.Log("Create crt error,Error info:", err)
        }
        os.Remove(baseinfo.CrtName)
        os.Remove(baseinfo.KeyName)
        os.Remove(crtinfo.CrtName)
        os.Remove(crtinfo.KeyName)
    }
    
    展开全文
  • TSL / SSL域验证证书发行 以下项目是Python 3中TSL / SSL证书发行机制的简单实现。发行这些证书是为了验证域所有权。 通过单击浏览器地址栏左侧的“锁定”图标,任何人都可以在任何域上查看此证书。
  • X.509标准

    2015-10-21 16:17:27
    X.509标准是ITU-T设计的PKI标准,它是为了解决X.500目录中的身份鉴别和访问控制问题而设计的。本书中定义的组建与X.509是基本一致的。 在X.509标准的早期版本中,除了最基本的组件——CA、证书持有者和依赖方外,...
    X.509标准是ITU-T设计的PKI标准,它是为了解决X.500目录中的身份鉴别和访问控制问题而设计的。本书中定义的组建与X.509是基本一致的。
    在X.509标准的早期版本中,除了最基本的组件——CA、证书持有者和依赖方外,只涉及了资料库。由于X.509标准是为X.500目录服务的,所以,资料库的形式就是X.500目录。在后来的X.509标准版本中,又增加了CRL Issuer组件。

    在X.509标准中,使用大量的篇幅来定义证书和CRL的数据格式。目前,使用最广泛、最成功的证书和CRL格式,都是X.509标准定义的格式。


    X.509标准_百度百科

    http://baike.baidu.com/view/2841580.htm

    展开全文
  • X.509标准简介

    千次阅读 2015-09-06 15:27:45
    X.509标准简介

    在和CA进行一些接触时,我们常常会听到一个名词: X.509。它是一种行业标准或者行业解决方案,在X.509方案中,默认的加密体制是公钥密码体制。为进行身份认证,X.509标准及公共密钥加密系统提供了数字签名的方案。用户可生成一段信息及其摘要(亦称作信息"指纹")。用户用专用密钥对摘要加密以形成签名,接收者用发送者的公共密钥对签名解密,并将之与收到的信息"指纹"进行比较,以确定其真实性。

    此问题的解决方案即X.509标准与公共密钥证书。本质上,证书由公共密钥加密钥拥有者的用户标识组成,整个字块有可信赖的第三方签名。典型的第三方即大型用户群体(如政府机关或金融机构)所信赖的CA。

    此外,X.509标准还提供了一种标准格式CRL,下面我们就来看一看 X.509标准下的证书格式极其扩展。

    目前X.509有不同的版本,例如 X.509 V2和x.509 v3都是目前比较新的版本,但是都在原有版本(X.509 V1)的基础上进行功能的扩充,其中每一版本必须包含下列信息:

    (1) 版本号

    (2) 序列号;

    (3) 签名算法标识符

    (4) 认证机构

    (5) 有效期限

    (6) 主题信息

    (7) 认证机构的数字签名

    (8) 公钥信息

    1、版本号:

    用来区分X.509的不同版本号

    2、序列号;

    由CA给予每一个证书的分配唯一的数字型编号,当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中;这也是序列号唯一的原因。

    3、签名算法标识符:

    用来指定用CA签发证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和HASH算法,须向国际指明标准组织(如ISO)注册。

    4、认证机构:

    即发出该证书的机构唯一的CA的x.500名字;

    5、有效期限:

    证书有效的时间包括两个日期:证书开始生效期和证书失效的日期和时间。在所指定的这两个时间之间有效;

    6、主题信息:

    证书持有人的姓名、服务处所等信息;

    7、认证机构的数字签名:

    以确保这个证书在发放之后没有被撰改过;

    8、公钥信息:

    包括被证明有效的公钥值和加上使用这个公钥的方法名称;

    X.509的扩展(V3)

    X.509标准第三版在V2的基础上进行了扩展,V3引进一种机制。这种机制允许通过标准化和类的方式将证书进行扩展包括额外的信息,从而适应下面的一些要求一:

    (1)一个证书主体可以有多个证书;

    (2)证书主体可以被多个组织或社团的其他用户识别;

    (3)可按特定的应用名(不是X.500名)识别用户,如将公钥同EMAIL地址联系起来;

    (4)在不同证书政策和实用下会发放不同的证书,这就要求公钥用户要信赖证书;证书并不限于这些标准扩展,任何人都可以向适当的权利机构注册一种扩展。将来会有更多的适于应用的扩展列入标准扩展集中。值得注意的是这种扩展机制应该是完全可以继承的。

    每一种扩展包括三个域:类型、可否缺省、值

    类型字段定义了扩展值字段中的数据类型。这个类型可以是简单的字符串,数值,日期,图片或一个复杂的数据类型。为便于交互,所有的数据类型都应该在国际知名组织进行注册。

    是否可缺省字段是一比特标识位。当一扩展标识为不可缺省时,说明相应的扩展值非常重要,应用程序不能忽略这个信息。如果使用一特殊证书的应用程序不能处理该字段的内容,就应该拒绝此证书。

    扩展值字段包含了这个扩展实际的数据。

    公开密钥证书的标准扩展可以分为以下几组:

    · 密钥和政策信息,包括机构密钥识别符、主体密钥识别符、密钥用途(如数字签字,不可否认性、密钥加密、数据加密、密钥协商、证书签字、CRL签字等),密钥使用期限等;

    · 主体和发证人属性,包括主体代用名、发证者代用名、主体检索属性等;

    · 证书通路约束,包括基本约束,指明是否可以做证书机构。

    · 与CRL有关的补充;

    X.509是国际标准化组织CCITT建议作为X.500目录检索的一部分提供安全目录检索服务。一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息一种非常通用的证书格式,所有的证书都符合X.509 国际标准。目前X.509有不同的版本,例如 X.509 V2和x.509 v3都是目前比较新的版本,但是都在原有版本基础上进行功能的扩充,其中每一版本必须包含下列信息:

    (1) 用来区分X.509的不同版本号既版本号

    (2) 由CA给予每一个证书的分配的编号即序列号;

    (3) 用于产生证书所用的方法以及一切参数即签名算法

    (4) CA的x.500名字即发出该证书的认证机构

    (5) 证书有效的时间包括两个日期,在所指定的两个时间之 间有效即有效期限

    (6) 证书持有人的姓名、服务处所等信息即主题信息

    (7) 认证机构的数字签名

    (8) 被证明的公钥值,加上使用这个公钥的方法名称即公钥信息

    n PKI (Public-Key Infrastructure) 公钥体系基础框架。

    n PKIX (Public-Key Infrastructure Using X.509)使用X.509的公钥体系基础框架。

    n X.500 由ISO和ITU提出的用于为大型网络提供目录服务的标准体系。

    n X.509 为X.500提供验证(Authenticating)体系的标准。

    n PKCS(Public Key Cryptography Standards)公钥加密标准,为PKI提供一套完善的标准体系。

    n 对于任何基于公钥体系的安全应用,必须确立其PKI。而电子签证机关(CA)是PKI中的一个关键的组成部分,它主要涉及两方面的内容,即公钥证书的发放和公钥证书的有效性证明。在PKIX中,CA遵循X.509标准规范。

    n X.509最早的版本X.509v1是在1988年提出的,到现在已升级到X.509v3,现将其涉及到的主要内容以及与前版本的比较列于下表。

    X.509 PKI国际标准更新版本对照表

    X.509 PKI 主要特性

    X.509 v1 & 2 X.509 v3

    证书信息 只有X.500 实体名,包括CA、证主(subject)名,证主公钥及其有效期。 充分扩展,可包含任何信息。

    CA 规范 CA体系鼓励带交叉的层状树型结构,无信任限制规范。 CA体系鼓励带交叉的层状树型结构,有信任限制规范。

    CA "证主 " 用户 CA、证主、用户在概念上严格区分

    CA "证主" 用户信任关系 认为每个用户至少信任一个CA。CA无法操纵与其它CA、证主及用户间的信任关系。 认为每个用户至少信任一个CA。CA可以规范与其它CA及证主间的信任关系。

    证书有效性验证方式 离线方式,通过检查证书有效期及是否出现在最近的CRL(证书吊销表)上。 支持离线与在线方式。

    证书吊销方法 简单CRL。 复杂的CRL,通过功能扩展支持在线方式。

    证书形式特点 身份形式的证书。 主要还是身份形式的证书,但支持信任委托形式的证书。

    匿名性 匿名程度依赖于 X.500 条目的匿名程度。 扩展功能支持彻底的匿名服务。

    X.509证书格式

    X.509是另一种非常通用的证书格式。所有的证书都符合ITU-T X.509国际标准;因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用。但实际上,不同的公司对X.509证书进行了不同的扩展,不是所有的证书都彼此兼容。在一份证书中,必须证明公钥及其所有者的姓名是一致的。对PGP证书来说,任何人都可以扮演认证者的角色。对X.509证书来说,认证者总是 CA或由CA指定的人(其实PGP证书也完全支持使用CA来确认证书的体系结构),一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。X.509标准定义了证书中应该包含哪些信息,并描述了这些信息是如何编码的(即数据格式),所有的X.509证书包含以下数据:

    <>X.509版本号:指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息。目前的版本是3。

    <>证书持有人的公钥:包括证书持有人的公钥,算法(指明密钥属于哪种密码系统)的标示符和其他相关的密钥参数。

    <>证书的序列号:创建证书的实体(组织或个人)有责任为该证书指定一个独一无二的序列号,以区别于该实体发布的其他证书。序列号信息有许多用途;比如当一份证书被回收以后,它的序列号就被放入证书回收列表(CRL)之中。

    <>证书持有人唯一的标示符:(或称DN-distinguished name)这个名字在 Internet上应该是唯一的。DN由许多部分组成,看起来象这样:

    CN=Bob Allen, OU=Total Network Security Division,

    O=Network Associates, Inc., C=US

    这些信息指出该科目的通用名,组织单位,组织和国家

    <>证书的有效期:证书起始日期和时间以及终止日期和时间;指明证书何时失效。

    <>证书发布者的唯一名字:这是签发该证书的实体的唯一名字。通常是CA。.使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书)

    <>发布者的数字签名:这是使用发布者私钥生成的签名。

    <>签名算法的标示符:指明CA签署证书所使用的算法。

    X.509证书和PGP证书之间有许多不同,最明显的如下所述:

    <>用户可以创建自己的PGP证书,但是必须向CA请求才能得到一份X.509证书。

    <>X.509证书天生只支持密钥拥有者的一个名字。

    <>X.509证书只支持证明密钥合法性的一个数字签名。

    要获得一份X.509证书,必须请求CA发给你证书。用户提供自己的公钥,证明自己拥有相应的私钥,并提供有关自己的某些特定信息。然后在这些信息上数字签名,并将整个数据包(称为证书请求)发给CA。CA做一些努力来验证用户提供的信息是正确的,然后就生成证书并返回给用户。

    一份X.509证书看起来很象一份带公钥的标准书面证书(类似于基础急救班的结业证书)。证书中包含名字和一些有关的个人信息,加上颁发证书人的签名。

    当前X.509证书最广泛的使用大概是在Web浏览器之中。

    展开全文
  • 关于 X.509标准简介

    2019-11-05 09:56:56
    关于 X.509标准简介常见参数常见X.509证书格式 X.509是一种通用的数字证书格式, 定义了公钥证书结构的基本标准也就是一些标准字段的集合 目前 X.509最新版是 v3, 但只是原有版本 V1的基础上进行的扩充 常见参数 ...

    关于 X.509标准简介

    • X.509是一种通用的数字证书格式, 定义了公钥证书结构的基本标准也就是一些标准字段的集合
    • 目前 X.509最新版是 v3, 但只是原有版本 v1的基础上进行的扩充

    常见参数

    基本参数
    版本 V3
    序列号 1b94d11fb1699ba3476370bd7767b3a2
    签名算法 sha256RSA
    签名哈希算法 sha256
    颁发者 CN=DO_NOT_TRUST_FiddlerRoot; O=DO_NOT_TRUST; OU=Created by http://www.fiddler2.com
    有效期从 2016年9月25日 21:45:41
    2022年9月25日 21:45:41
    使用者 CN=*.csdn.net; O=DO_NOT_TRUST; OU=Created by http://www.fiddler2.com
    公钥 RSA(2048 Bits) > 30 82 01 0a 02 82 …
    公钥参数 05 00
    增强型密钥用法 服务器身份验证 (1.3.6.1.5.5.7.3.1)
    使用者可选名称 DNS Name=*.csdn.net
    授权密钥标识符 KeyID=a1f450493966c9afd8828cdb7798cd2ab3db09a4
    使用者密钥标识符 d7080cab075efe657a242431bed17de756309612
    密钥用法 Digital Signature, Key Encipherment, Data Encipherment (b0)
    指纹 b76df61a1383def5647af41ab8f2033a65843653
    • 其中序列号是 CA给每一个证书分配的编号, 主要用途是当证书被取消时会将证书的序列号放入由 CA签发的 CRL中当唯一标识

    常见X.509证书格式

    • .cer/ .crt文件一般是单个证书文件, 编码方式一般是 DER或 PEM
    • .pem文件是将二进制数据编码通过 ASCII编码来表示, 可以存放证书或私钥. 存储结构: 开始-----BEGIN/中间数据部分是 Base64编码数据/结束-----END
    • .pfx/ .p12是PKCS#12文件, PKCS#12是一种交换数字证书的加密标准, 用来描述个人身份信息, 用于存放公钥和私钥, 可以存放多个证书, 并由密码保护, 能用于 Java Keysotre文件, Tomcat等
    • .p10是证书请求文件, 使用的 PKCS#10证书请求语法标准, 类似于 .csr文件
    • .csr文件一般存储公钥, 如有效期, 颁发者, 密钥签名等
    • .p7r是 CA证书申请响应文件, 使用的 PKCS#7加密消息的语法标准, 由 RSA安全体系在公钥加密系统中交换数字证书产生的一种加密标准
    • .p7b/ .p7c也是PKCS#7证书格式, 仅仅包含证书和证书吊销列表(CRL)列表信息, 不含私钥

    如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!

    展开全文
  • X.509标准简介--笔记

    2020-07-18 17:32:52
    X.509标准简介 在和CA进行一些接触时,我们常常会听到一个名词: X.509。它是一种行业标准或者行业解决方案,在X.509方案中,默认的加密体制是公钥密码体制。为进行身份认证,X.509标准及公共密钥加密系统提供了数字...
  • x509

    2017-09-15 10:08:14
    所有的证书都符合ITU-T X.509国际标准,因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用。 所有的X.509证书包含以下数据:1、X.509版本号:指出该证书使用了哪种版本的X.509标准,版本号会...
  • CA基本常识:X.509标准

    千次阅读 2019-03-18 16:44:39
    为进行身份认证,X.509标准及公共密钥加密系统提供了数字签名的方案。用户可生成一段信息及其摘要(亦称作信息"指纹")。用户用专用密钥对摘要加密以形成签名,接收者用发送者的公共密钥对签名解密, 并将之与...
  • PKCS与X.509标准的简单说明

    千次阅读 2016-01-20 10:58:30
    第一代PKI标准主要包括美国RSA公司的公钥加密标准(Public Key Cryptography Standards,PKCS)系列、国际电信联盟的ITU-T X.509、IETF组织的公钥基础设施X.509(Public Key Infrastructure X.509,PKIX)标准系列、...
  • X509证书

    千次阅读 2017-09-29 09:25:43
    X509证书 X.509是一种非常通用的证书格式。所有的证书都符合ITU-T X.509国际标准,因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用。 在一份证书中,必须证明公钥及其所有者的姓名是一致的...
  • 基于X.509标准的R的公钥基础结构 该软件包提供了与加密,解密,签名,密钥,证书和公钥基础结构管理有关的工具。 它还提供了诸如工具来生成加密安全的随机字节。 有关使用各种类型的键的更多信息和说明,请参见 。 ...
  • ITU-T 国际电信联盟 X.509 标准

    热门讨论 2011-03-02 19:36:55
    ITU-T 国际电信联盟 X.509 标准 更多信息请参考: http://wiki.hawebs.net/index.php?title=%E5%8D%8F%E8%AE%AE%E7%9B%B8%E5%85%B3%E8%B5%84%E6%96%99%E4%B8%8B%E8%BD%BD
  • 什么是 "X.509标准

    千次阅读 2007-06-29 11:16:00
    在和CA进行接触时,我们常常会听到一个名词: X.509。...为进行身份认证,X.509标准及公共密钥加密系统提供了数字签名的方案。用户可生成一段信息及其摘要(亦称作信息"指纹")。用户用专用密钥对摘要加密以形成签名,
  • 基于X.509标准的CA数字证书系统的设计与实现
  • 遵循X_509标准的CA认证中心设计与实现,把CA模型建立为两层的或三层的。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 655
精华内容 262
关键字:

x509标准