扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇文章中,将描述如何使用go创建CA,并使用CA签署证书。在使用openssl创建证书时,遵循的步骤是 创建秘钥 创建CA 生成要颁发证书的秘钥 使用CA签发证书。这种步骤,那么我们现在就来尝试下。
成都创新互联公司专业为企业提供兴宁网站建设、兴宁做网站、兴宁网站设计、兴宁网站制作等企业网站建设、网页设计与制作、兴宁企业网站模板建站服务,十年兴宁做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
首先,会从将从创建 CA 开始。 CA 会被用来签署其他证书
接下来需要对证书生成公钥和私钥
然后生成证书:
我们看到的证书内容是PEM编码后的,现在 caBytes 我们有了生成的证书,我们将其进行 PEM 编码以供以后使用:
证书的 x509.Certificate 与CA的 x509.Certificate 属性有稍微不同,需要进行一些修改
为该证书创建私钥和公钥:
有了上述的内容后,可以创建证书并用CA进行签名
要保存成证书格式需要做PEM编码
创建一个 ca.go 里面是创建ca和颁发证书的逻辑
如果需要使用的话,可以引用这些函数
panic: x509: unsupported public key type: rsa.PublicKey
这里是因为 x509.CreateCertificate 的参数 privatekey 需要传入引用变量,而传入的是一个普通变量
extendedKeyUsage :增强型密钥用法(参见"new_oids"字段):服务器身份验证、客户端身份验证、时间戳。
keyUsage : 密钥用法,防否认(nonRepudiation)、数字签名(digitalSignature)、密钥加密(keyEncipherment)。
文章来自
有没有用,如果是从企业和国家的角度来看,有这几点原因,一一列举如下:
易语言是一个自主开发,适合国情,不同层次不同专业的人员易学易用的汉语编程语言。
1、编译器的选择空间:易语言是从编码到集成环境全部拥有知识产权的一套产品,而这在其他编程语言中是不可想像的。大多数其他的BASIC语言、Pascal语言、Go语言、C语言、Lua语言、Javascript等等语言都没有对编码的知识产权(Java语言不太清楚),几乎全部免费开放。
所以你完全可以在同一个语言里,找到无数个不同版本的编译器;以C语言为例,从免费的Watcom C Compiler、GNU C
Compiler到收费的Visual Studio、Borland C
Compiler,不同版本的编译器之间,可以说是自由竞争的关系;今天你觉得GCC代码生成效率太低,明天就可以改用Watcom C
Compiler,后天你兜兜里闲钱多了,想玩玩可视化或者开发Windows应用了,转身就可以改用Visual
Studio,……(以下省略无数的C编译器)
用户的选择多,编译器的应用生态就好,用户也有机会用到更多便宜、快速、好用的编译器,而不是只能吊死在一棵树上。
2、资质认证:一个求职者被企业录用,企业看中他的就是能力。但是目前可以证明能力的,不过就文凭和证书:像三级数据库证书、二级C程序设计语言证书、好像还有研究生编程水平证书等等。可是易语言的证书在哪里呢,要去哪里考呢?难道要花钱去公证处证明“本人具有某某某企业所需易语言编程能力”?
3、应用:其实还是生态问题(可以看成是按研究方向分类的,既有的开发人员和代码的丰富程度问题),其它的语言起步早,使用人群广泛,程序之间衔接的方式也多,现成的可以提供参考的程序代码也多,甚至于还有各专业领域、网上社区/社群的共享的代码资源,像BSD协议的,GPL协议的,Mozilla协议的,等等等等;如今只要你能找,会搜索,不会代码,专业内的编程问题,基本上都不是问题。但是易语言……,这个相比之下不太好找。(不信去各种开源社区看看,玩易语言的确实不是太多)
加上很多对代码能力有需求的企业,内部很早可能已经有工程人员在维护代码库了,易语言出现太晚;在现代软件工程管理技术广泛应用的时代,代码工程量无限扩张的时代,如若改弦更张,代码太多,事情太难,成本投入难以预期。(可以看一下有什么知名的或者可以叫出名字的企业是用易语言的,或者说易语言的客户有哪些你认识的)
4、知识产权贸易:今天的世界是全球化的世界,是贸易全球化的世界。2001年中国加入 WTO,签署了关于货物贸易、服务贸易、知识产权贸易的一揽子协议。有句话“引进来,走出去”,引什么?就是要引资,引人才,引技术。2000年是中国经济飞速发展的时代,正是处于对技术的高需求时期。用土到掉渣的话来说,当时很多代码、集成电路、机床,那都是Made in外国的,用的语言当然也是外国的,易语言当然就用不上。不学着这些语言,那么该怎么使用、消化外来的知识,又该怎么转化别人的知识,为我所用,到最后实现“走出去”呢?
2000年易语言在中国发布了最早的版本,而易语言影响力有限的原因就在这里。
5、中国计算机技术的发展历史,就是中国高技术发展史的重要部分,与国家发展息息相关;(在2000年的很早以前)从863计划开始,国家投入大量人力物力,首要的是缩小与发达国家的差距,提高计算能力和相关软硬件技术,服务于国防事业、科研事业,并最终改善民生,服务人民。(国防科技大学就出版了很多关于计算机技术的书)从学科科研发展历史这个角度来看,宗旨在于普及中文编程的易语言不是人才培养、科教强国的重点所在。在技术发展这一块,完全不必搞“大炼钢”式的全民行动,反而只要能集中力量,做好有助于国家综合实力的事就行。(像以前的计算机上计算的导弹运行轨迹,用的是什么编程语言不重要,机器语言、汇编语言都OK,不在乎文学式的大家都懂,而在于科研人员能够实现目标,国家可以实现其目的)
如果从个人角度来看,只要你没有从事计算机技术行业的需求,不在乎什么先进的、前沿的技术,也不编写复杂的程序,还乐于为易语言花钱,或者乐于承担获取到盗版软件的危险,学易语言没有什么问题。
如何验证证书链的签出关系
在证书链中,通常由根CA证书,签出中间CA证书,再签出服务证书。这是一个签出链关系:
Root CA - Intermediate CA1 - Intermediate CA2 - ... Intermediate CAn - Server Certificate
那么如何验证谁是谁的签出关系呢,意思就是验证一个证书是由谁签发的。
通常我们拿到一个完整服务端证书的时候会包含:
ca-chain.pem里面可能包含多个CA证书,如何找到直接签出那个CA证书呢。
我们查看证书的一般内容:
有几个信息:
这里Issuer就明确表明了当前证书是由谁签发的,那我们去找ca-chain里面的所有证书,挨个遍历找出其Subject和这个一样,那么就说明是签发证书。
理论上是这样的,但是Subject只是包含文本信息,用户可以篡改伪造,只要是同名Subject就可以啦。所以这个字段只是便于肉眼辨识使用,真正使用验证的是signature信息。
在前面证书内容中,最后我们看到有Signature Algorithm域,它的值就是签出证书的signature,这个签名是根据签出证书的内容生成的,只有签出证书本身才能得出这个signature。所以我们需要对照CA证书,生成他的signature值,然后和服务端证书里的这个域值进行比较,如果相当就说明是签出证书。
这个算法比较复杂,不细究了,golang里面提供了函数可以直接调用:
func (c *Certificate) CheckSignatureFrom(parent *Certificate) error
举例:
输入:go build test.go ./test cert.pem ca.pem
验证ca.pem是不是cert.pem的直接签出证书。
还有一个办法是使用: func ( Certificate) Verify() 函数。
如果verify成功,在返回的chains [][] Certificate中每一列的:
周末在家无趣,研究了一个golang里面的Certificate.Verify函数。
golang的官方定义在这里:
函数原型声明如下:
func (c Certificate) Verify(opts VerifyOptions) (chains [][] Certificate, err error)
其中:
这个函数的功能是:
Verify attempts to verify c by building one or more chains from c to a certificate in opts.Roots, using certificates in opts.Intermediates if needed. If successful, it returns one or more chains where the first element of the chain is c and the last element is from opts.Roots.
If opts.Roots is nil and system roots are unavailable the returned error will be of type SystemRootsError.
解释一下就是:
举一个例子:
假设存在证书链签出关系:C1 - C2 - C3 - C4,即C1签出C2,C2签出C3,C3签出C4;现在使用函数:
我们根据Intermediates和Roots的值不同,比较输出结果:
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流