zoukankan      html  css  js  c++  java
  • openssl 自建CA签发证书 网站https的ssl通信


    <<COMMENT
    X509 文件扩展名

    首先我们要理解文件的扩展名代表什么。DER、PEM、CRT和CER这些扩展名经常令人困惑。
    很多人错误地认为这些扩展名可以互相代替。尽管的确有时候有些扩展名是可以互换的,
    但是最好你能确定证书是如何编码的,进而正确地标识它们。正确地标识证书有助于证书的管理。

    编码 (也用于扩展名)

    # DER =扩展名DER用于二进制DER编码的证书。这些证书也可以用CER或者CRT作为扩展名。
    比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。
    # PEM =扩展名PEM用于ASCII(Base64)编码(指字符编码)的各种X.509 v3 证书。文件开始由一行"—–BEGIN …“开始。

    #CRT =扩展名CRT用于证书。证书可以是DER编码,也可以是PEM编码。扩展名CER和CRT几乎是同义词。
    这种情况在各种unix/linux系统中很常见。
    #CER =CRT证书的微软型式。可以用微软的工具把CRT文件转换为CER文件(CRT和CER必须是相同编码的,DER或者PEM)。
    扩展名为CER的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.execryptext.dll, CyrptExtOpenCER),
    进而弹出一个对话框来导入并/或查看证书内容。
    #KEY =扩展名KEY用于PCSK#8的公钥和私钥。这些公钥和私钥可以是DER编码或者PEM编码。

    COMMENT

    <<COMMENT
    #### RSA Key file (PKCS#1)
    # openssl genrsa 和 ssh-keygen 命令生成的私钥就是这样的格式
    -----BEGIN RSA PRIVATE KEY-----
    -----BEGIN RSA PUBLIC KEY-----
    BASE64 ENCODED DATA
    -----END RSA *** KEY-----


    #### Key file (PKCS#8)
    # openssl rsa -pubout 生成的公钥就是这样的格式
    -----BEGIN PRIVATE KEY-----
    -----BEGIN PUBLIC KEY-----
    BASE64 ENCODED DATA
    -----END *** KEY-----


    #### SSH V1 file
    # ssh-keygen 生成的公钥就是这样的格式
    sh-rsa AAAAB


    #### SSH V2 file (RFC4716)
    ---- BEGIN SSH2 PUBLIC KEY ----
    BASE64 ENCODED DATA
    ---- END SSH2 PUBLIC KEY ----
    COMMENT

    <<COMMENT
    生成 RSA 私钥 和 证书请求文件CSR
    COMMENT

    # example1 利用CA的RSA密钥创建一个自签署的CA证书(X.509结构)
    openssl genrsa -out private/cakey.pem 2048
    openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

    # 再转换成pkcs12格式
    openssl pkcs12 -export -inkey private/cakey.pem -in cacert.pem -out cacert.pkcs12

    # example2 生成一个2048位的RSA私钥,并用3DES加密(密码为1111),保存为server.key文件
    # 再用server.key生成证书签署请求CSR(这个CSR用于之外发送待CA中心等待签发)
    openssl genrsa -out server.key -passout pass:1111 -des3 2048
    openssl req -new -key server.key -out server.csr

    # example3 查看CSR的细节:
    openssl req -noout -text -in server.csr

    <<COMMENT
    x509 证书操作
    COMMENT

    # example1 转换DER证书为PEM格式
    openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pem

    # example2 使用根CA证书对"请求签发证书"进行签发,生成x509格式证书
    openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extensions v3_req

    # example3 打印出证书的内容
    openssl x509 -in server.crt -noout -text

    # 转换成pkcs12格式
    openssl pkcs12 -export -inkey usg6630.key -in usg6630.crt -out usg6630key.pkcs12

    <<COMMENT
    CA 签名
    COMMENT

    # example 利用 CA 证书 ca.crt 签署请求证书 server.crt:
    openssl ca -cert private/cakey.pem -keyfile cacert.pem -in server.csr -out server.crt

    <<COMMENT
    v3_扩展
    COMMENT

    [ req ]
    req_extensions = v3_req # The extensions to add to a certificate request

    [ v3_req ]
    # Extensions to add to a certificate request
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    #subjectAltName = @alt_names
    subjectAltName = "DNS:*.cnicg.cn,DNS:*.cniotroot.cn,DNS:*.niot.cn"

    <<COMMENT
    例子,快速搭建签署
    COMMENT

    # 生成 CA 证书密钥文件 和自签证书
    openssl genrsa -out private/cakey.pem 2048
    openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

    # 生成 Server 证书密钥文件 & 证书签名请求
    #openssl genrsa -out server.key 2048
    openssl req -newkey rsa:2048 -nodes -keyout usg6630.key -out usg6630.csr

    # 签发 Server 证书,会根据该配置文件 openssl.cnf 加载 CA 证书并集合 Server 证书签名请求文件来完成签名
    # -batch 不问问题 -passin pass:foobar
    openssl ca -in usg6630.csr -out usg6630.crt -batch -days 965 -extensions v3_req


    <<COMMENT
    防火墙端配置,WEB端配置
    COMMENT

    # 在防火墙 WEB页面上传证书和私钥
    # USG6630 防火墙上以usg6630-cert.pem 作为证书
    web-manager security server-certificate usg6630-cert.pem
    dis pki ca_list
    dis pki cert_list


    <<COMMENT
    公私钥格式转换
    COMMENT
    # 生成私钥,默认私钥都是PEM编码格式
    # 私钥为PKCS#1结构,以-----BEGIN RSA PRIVATE KEY-----开头
    # ssh-keygen公钥为ssh v1 结构,以ssh-rsa AAAAB3 开头
    ssh-keygen -t rsa -f id_rsa
    openssl genrsa -out id_rsa

    # 从PKCS#1私钥生成PKCS#8格式公钥
    openssl rsa -pubout -in id_rsa -out id_rsa_pub.pem

    # PKCS#8格式公钥转换成 SSH v1的格式公钥
    ssh-keygen -f id_rsa_pub.pem -i -m pkcs8 > id_rsa_ssh.pub
    # id_rsa_ssh.pub 等同于 id_rsa.pub

    # SSH v1 格式公钥转换成PKCS#1公钥(PEM)
    # 转换后文件以-----BEGIN RSA PUBLIC KEY-----开头
    ssh-keygen -f id_rsa.pub -e -m PEM > id_rsa_pub_pkcs1.pem

    # SSH v1 格式公钥转换成PKCS#8公钥
    # 转换后文件以-----BEGIN PUBLIC KEY-----开头
    ssh-keygen -f id_rsa.pub -e -m PKCS8 > id_rsa_pub_pkcs8.pem
    # id_rsa_pub_pkcs8.pem 等同于 id_rsa_pub.pem

    # SSH v1 格式公钥转换成RFC4716(SSH v2)格式公钥
    # 转换后文件以---- BEGIN SSH2 PUBLIC KEY ----开头
    ssh-keygen -f id_rsa.pub -e -m RFC4716 > id_rsa_pub_RFC4716.pem

  • 相关阅读:
    iOS-夜间模式(换肤设置)
    iOS-自定义起始时间选择器视图
    [SpriteKit] 系统框架中Cocos2d-x制作小游戏ZombieConga
    [SceneKit] 不会 Unity3D 的另一种选择
    Android WiFi开发
    Java 工具类 —— 定时器(Timer/TimerTask)
    java 语法 —— 数组
    IDEA 的使用(快捷键、括号对齐的方式)
    cmd 高级用法
    MySQL 基本信息的查询(初始化配置信息 my.ini)
  • 原文地址:https://www.cnblogs.com/fatt/p/10606826.html
Copyright © 2011-2022 走看看