加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

使用openssl演练数字签名

发布时间:2020-12-13 22:03:25 所属栏目:Linux 来源:网络整理
导读:以下代码摘自网上,设置一个server和client,client代码如下: package mainimport ( " fmt " io/ioutil net/http " )func main() { resp,err : = http.Get( https://localhost:8081 ) if err != nil { fmt.Println( error: ,err) return } defer resp.Body.

以下代码摘自网上,设置一个server和client,client代码如下:

package main

import (
    "fmt"
    io/ioutilnet/http"
)

func main() {
    resp,err := http.Get(https://localhost:8081)
    if err != nil {
        fmt.Println(error:,err)
        return
    }
    defer resp.Body.Close()
    body,err := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}

?

server代码如下:

?

crypto/tlscrypto/x509
)

func main() {
    pool := x509.NewCertPool()
    caCertPath := ca.crt

    caCrt,1)"> ioutil.ReadFile(caCertPath)
    ReadFile err:
    }
    pool.AppendCertsFromPEM(caCrt)

    tr := &http.Transport{
        TLSClientConfig: &tls.Config{RootCAs: pool},}
    client := &http.Client{Transport: tr}
    resp,err := client.Get(Get error:(body))
}

?

?生成密钥和数字签名方式如下:

  • openssl genrsa -out ca.key 2048? ? ? ?#生成CA私钥
  • openssl req -x509 -new -nodes -key ca.key -subj "/CN=charlie.com" -days 5000 -out ca.crt? #使用CA私钥生成CA公钥
  • openssl genrsa -out server.key 2048? ? #生成server端私钥
  • openssl req -new -key server.key -subj "/CN=charlie.com" -out server.csr? ? #生成签名请求
  • openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000? ? #生成CA签名的server端数字签名

注意:-subj subj选项表示证书拥有者的信息值,取代证书请求文件中的申请者的信息值。/cn必须是服务端的域名,使用IP可能会报如下错误,可以使用修改/etc/hosts的方式做域名映射

如谷歌的subj内容为:



server执行如下:

client执行如下:

?

?

可以使用如下方式验证证书有效性:

1.openssl s_server -msg -verify -tls1_2 -state -cert cert.cer -key ..privkey -accept 18444

使用上面的命令开启一个ssl测试服务器

2.openssl s_client -msg -verify -tls1_2 ?-state -showcerts -cert cert.cer -key ..privkey -connect localhost:18444

使用这个命令连接ssl测试服务器,如果连接成功会打印出证书和私钥的信息,然后输入任何字符都会在服务器端echo出来。

?
查看CA的数字证书,可以看到CA为自签发的,签发者和使用者是同一人,此外在数字签名文件中可以看到CA的公钥信息,使用该公钥后续可以验证CA签发的文件的正确性


再看下server端的数字证书,该数字证书经过charlie1.com的CA签发,可以看到签发者和使用者不一样。该证书中包含了server的公钥,用来后续与client端tls协商使用



以上信息也可以在windows的证书中查看:

?
本次生成的密钥和代码参见:https://files.cnblogs.com/files/charlieroro/%E5%8F%8C%E5%90%91%E8%AE%A4%E8%AF%81%E4%BB%A3%E7%A0%81%E5%92%8C%E8%AF%81%E4%B9%A6.rar
参考:https://studygolang.com/articles/4461
?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读