zoukankan      html  css  js  c++  java
  • ssl证书生成与验证

      要做这件事情的起因在于,代码的升级包放在一个https的服务器上,我们的设备要实现升级,则是通过wget 获取https上的升级包,并且要实现验证证书的功能,这样可以防止设备被恶意篡改升级成其他文件包。

      起初,https的服务器都已经被搭建好了,可是验证证书的过程一直不顺利,现在把网络上自己试验成功方法总结如下,日后出现类似问题方便参考了。

      环境:https服务器,Ubuntu12.04+apache2+openssl

      首先,理解一下证书的类型。

      SSL证书包括:

      1,CA证书,也叫根证书或者中间级证书。如果是单向https认证的话,该证书是可选的。不安装CA证书的话,浏览器默认是不安全的。

      2,服务器证书,必选项。通过key,证书请求文件csr,再通过CA证书签名,生成服务器证书。

      3,客户端证书,可选项。若有客户端证书则是双向https验证。

      以上所有证书都可以自己生成。

      文件后缀

        linux系统是不以后缀名来判断文件类型的,但是为了我们能够更好地判断文件用途,所以添加各种后缀。以下是约定成俗的后缀。

        *.key:密钥文件,一般是SSL中的私钥;

        *.csr:证书请求文件,里面包含公钥和其他信息,通过签名后就可以生成证书;

        *.crt, *.cert:证书文件,包含公钥,签名和其他需要认证的信息,比如主机名称(IP)等。

        *.pem:里面一般包含私钥和证书的信息。

      服务器证书的生成

      a)  生成服务器私钥

         openssl genrsa -des3 -out server.key 1024

         输入加密密码,用 128 位 rsa 算法生成密钥,得到 server.key 文件。

       b)  生成服务器证书请求( CSR )

         openssl req -new -key server.key -out server.csr

         CSR( Certificate Signing Request)是一个证书签名请求,在申请证书之前,首先要在服务器上生成 CSR ,并将其提交给 CA 认证中心, CA 才能签发 SSL 服务器证书。也可以认为, CSR 就是一个在服务器上生成的证书。

        在生成这个文件的过程中,有一点需要特别注意,Common Name 填入主机名(或者服务器IP)

      c)  自己生成服务器证书 

        如果不使用 CA 证书签名的话,用如下方式生成: 

        openssl req -x509 -days 1024 -key server.key -in server.csr > server.crt 

        用服务器密钥和证书请求生成证书 server.crt , -days 参数指明证书有效期,单位为天。商业上来说,服务器证书是由通过第三方机构颁发的,该证书由第三方认证机构颁发的。    

        如果使用 CA 证书签名,用 openssl 提供的工具 CA.sh 生成服务器证书:

           mv server.csr newreq.pem

           ./CA.sh -sign

           mv newcert.pem server.crt

         签名证书后,可通过如下命令可查看服务器证书的内容:

           openssl x509 -noout -text -in server.crt

         可通过如下命令验证服务器证书:

           openssl verify -CAfile ca.crt server.crt 

       

      客户证书的生成

       客户证书是可选的。如果有客户证书,就是双向认证 HTTPS ,否则就是单向认证 HTTPS 。

       a)  生成客户私钥

         openssl genrsa -des3 -out client.key 1024

       b)  生成客户证书签名请求

         openssl req -new -key client.key -out client.csr

       c)  生成客户证书(使用 CA 证书签名)

         openssl ca -in client.csr -out client.crt

       d)  证书转换成浏览器认识的格式

         openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx

      证书列表 

      如果使用双向认证,就会有三个私钥和三个证书。分别是 ca.key, ca.crt, server.key, server.crt, client.key, client.crt ,以及给浏览器的 client.pfx 。

       如果使用有 CA 证书的单向认证,证书和私钥就是 ca.key, ca.crt, server.key, server.crt 。

       如果使用无 CA 证书的单向认证,证书和私钥就是 server.key, server.crt 。

    最后在fedora作为客户端,wget 1.14通过命令

      wget --ca-certificate=server.crt https://+ip+file 成功获取文件,证书验证通过。

  • 相关阅读:
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 88怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 81.0怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 40怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 24.0怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 21.0怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下驱动器试运行提示过速度保护怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下驱动器如何执行绝对值清零
    倍福TwinCAT(贝福Beckhoff)基础教程 松下绝对值驱动器如何做初始化设置
    倍福TwinCAT(贝福Beckhoff)基础教程 松下官方软件开启报错伺服未就绪怎么办
    JAVA Eclipse 启动 Eclipse 弹出“Failed to load the JNI shared library jvm_dll”怎么办
  • 原文地址:https://www.cnblogs.com/vincentfu/p/5475248.html
Copyright © 2011-2022 走看看