当前位置: 首页 > news >正文

京东网站建设成都市住房和城乡建设部网站

京东网站建设,成都市住房和城乡建设部网站,刚注册公司怎么做网站,黑龙江生产建设兵团知识网站本文为演示采用自签名证书一.生成证书通过openssl工具生成证书1.1 安装opensslmacos通过brew安装brew install openssl1.2 生成跟证书私钥openssl genrsa -out ca.key 40961.3 准备配置文件vim ca.conf内容如下[ req ] default_bits 4096 distinguished_name req_disti…本文为演示采用自签名证书一.生成证书通过openssl工具生成证书1.1 安装opensslmacos通过brew安装brew install openssl1.2 生成跟证书私钥openssl genrsa -out ca.key 40961.3 准备配置文件vim ca.conf内容如下[ req ] default_bits 4096 distinguished_name req_distinguished_name[ req_distinguished_name ] countryName Country Name (2 letter code) countryName_default CN stateOrProvinceName State or Province Name (full name) stateOrProvinceName_default JiangSu localityName Locality Name (eg, city) localityName_default NanJing organizationName Organization Name (eg, company) organizationName_default Sheld commonName Common Name (e.g. server FQDN or YOUR name) commonName_max 64 commonName_default Ted CA Test生成根证书签发申请文件(csr文件)openssl req -new -sha256 -out ca.csr -key ca.key -config ca.conf该命令含义如下req——执行证书签发命令-new——新证书签发请求-key——指定私钥路径-out——输出的csr文件的路径1.4 自签发根证书(cer文件)openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt该命令的含义如下x509——生成x509格式证书-req——输入csr文件-days——证书的有效期天-signkey——签发证书的私钥-in——要输入的csr文件-out——输出的cer证书文件1.5 生成服务端私钥openssl genrsa -out server.key 20481.6 准备配置文件得到server.confvim server.conf内容如下[ req ] default_bits 2048 distinguished_name req_distinguished_name req_extensions req_ext[ req_distinguished_name ] countryName Country Name (2 letter code) countryName_default CN stateOrProvinceName State or Province Name (full name) stateOrProvinceName_default JiangSu localityName Locality Name (eg, city) localityName_default NanJing organizationName Organization Name (eg, company) organizationName_default Sheld commonName Common Name (e.g. server FQDN or YOUR name) commonName_max 64 commonName_default server.com[ req_ext ] subjectAltName alt_names[alt_names] DNS.1 server.com生成服务端证书申请文件openssl req -new -sha256 -out server.csr -key server.key -config server.conf参考1.3输入服务端证书信息1.7 用CA证书签发服务端证书openssl x509 -req -days 3650 -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt -extensions req_ext -extfile server.conf这里有必要解释一下这几个参数-CA——指定CA证书的路径-CAkey——指定CA证书的私钥路径-CAserial——指定证书序列号文件的路径-CAcreateserial——表示创建证书序列号文件(即上方提到的serial文件)创建的序列号文件默认名称为-CA指定的证书名称后加上.srl后缀1.8 生成客户端私钥openssl genrsa -out client.key 20481.9 准备配置文件得到client.confvim client.conf内容如下[ req ] default_bits 2048 distinguished_name req_distinguished_name req_extensions req_ext[ req_distinguished_name ] countryName Country Name (2 letter code) countryName_default CN stateOrProvinceName State or Province Name (full name) stateOrProvinceName_default HeNan localityName Locality Name (eg, city) localityName_default AnYang organizationName Organization Name (eg, company) organizationName_default Sheld_client commonName Common Name (e.g. server FQDN or YOUR name) commonName_max 64 commonName_default server.com[ req_ext ] subjectAltName alt_names[alt_names] DNS.1 server.com DNS.2 localhost生成客户端证书申请文件openssl req -new -sha256 -out client.csr -key client.key -config client.conf1.10 用跟证书签发客户端证书openssl x509 -req -days 3650 -CA ca.crt -CAkey ca.key -CAserial ca.srl -in client.csr -out client.crt -extensions req_ext -extfile client.conf需要注意的是上方签发服务端证书时已经使用-CAcreateserial生成过ca.srl文件因此这里不需要带上这个参数了。二. gin框架实现https服务端不需要验证客户端证书的示例2.1 项目引入gin框架go get -u github.com/gin-gonic/gin2.2 服务端代码package mainimport (github.com/gin-gonic/ginnet/http )func main() {router : gin.New()router.GET(/test, func(c *gin.Context) {c.JSON(200, gin.H{message: success,})})// 可以直接用//router.RunTLS(0.0.0.0:10679, ./certs/server.cer, ./certs/server.key)server : http.Server{Addr: 0.0.0.0:10679, Handler: router}_ server.ListenAndServeTLS(./certs/server.cer, ./certs/server.key) } 2.3 安全提示打开浏览器访问https://localhost:10679/test因为浏览器并不信任证书的颁发机构浏览器会有安全提示当然可以点高级直接强行访问页面同样可以返回结果很多文章也是到这里就结束了。强迫症的我还是要解决一下。2.4 给浏览器添加自己生成的CA证书本文选择firefox浏览器因为设置可以轻松添加信任CA证书。chrome则是直接掉起系统的证书没有找到友好的办法自己添加我们把CA证书(1.4节生成的ca.csr)添加到firefox证书颁发机构中去这样浏览器就信任我们自制的CA证书了。路径为设置-隐私与安全-查看证书-导入由于我们证书配置的common name是server.com因此需要修改本地hosts文件将下面文字添加到hosts文件中127.0.0.1 server.com再次访问https://server.com:10679/test不再阻止三.实现服务器和客户端双端验证3.1 服务端代码package mainimport (crypto/tlscrypto/x509fmtgithub.com/gin-gonic/ginio/ioutillognetnet/httposos/signalsyscall )var (caCert string ./certs/ca.crtserverCert string ./certs/server.crtserverKey string ./certs/server.key )func main() {router : gin.New()router.Use(gin.Logger())router.GET(/test, func(c *gin.Context) {c.JSON(200, gin.H{message: success,})})// 客户端CA证书certPool : x509.NewCertPool()ca, err : os.ReadFile(caCert)if err ! nil {fmt.Printf(load ca err: %s, err)return}if ok : certPool.AppendCertsFromPEM(ca); !ok {fmt.Printf(certpool append ca fail.)return}// 可以直接用注释的代码代替最后两行//router.RunTLS(0.0.0.0:10679, ./cert/server.cer, ./cert/server.key)server : http.Server{Addr: server.com:10679,Handler: router,TLSConfig: tls.Config{ClientAuth: tls.RequireAndVerifyClientCert,//这里一定要注意服务端设置ClientCAs用于服务端验证客户端证书客户端设置RootCAs用户客户端验证服务端证书。设置错误或者设置反了都会造成认证不通过。//RootCAs: certPool,ClientCAs: certPool,},}_ server.ListenAndServeTLS(serverCert, serverKey) }3.2 客户端代码package mainimport (crypto/tlscrypto/x509fmtio/ioutillognet/httpos )func main() {pool : x509.NewCertPool()caCrt, err : os.ReadFile(./certs/ca.crt)if err ! nil {log.Fatal(read ca.crt file error:, err.Error())}pool.AppendCertsFromPEM(caCrt)cliCrt, err : tls.LoadX509KeyPair(./certs/client.crt, ./certs/client.key)if err ! nil {log.Fatalln(LoadX509KeyPair error:, err.Error())}tr : http.Transport{TLSClientConfig: tls.Config{//这里一定要注意服务端设置ClientCAs用于服务端验证客户端证书客户端设置RootCAs用户客户端验证服务端证书。设置错误或者设置反了都会造成认证不通过。RootCAs: pool,//ClientCAs: pool,Certificates: []tls.Certificate{cliCrt},},}client : http.Client{Transport: tr}resp, err : client.Get(https://server.com:10679/test)if err ! nil {fmt.Printf(get failed. | err: %s\n, err)return}defer resp.Body.Close()body, err : ioutil.ReadAll(resp.Body)fmt.Println(string(body))} 四. 整理过程中遇到的bug4.1 tls: failed to verify certificate: x509: “server.com” certificate is not standards compliantremote error: tls: bad certificate这两个报错可能就是客户端或服务端设置参数ClientCAs、RootCAs错误有关。服务端设置ClientCAs里面保存客户端的CA证书Pool用于服务端验证客户端证书。客户端设置RootCAs里面保存服务端的CA证书Pool用户客户端验证服务端证书。设置错误或者设置反了都会造成认证不通过。这就属于知道就很简单解决但找不到错误就很崩溃本人因为这个小bug竟然熬了一夜说多了都是泪啊啊啊啊。。。4.2 use SANs or temporarily enable Common Name matching with GODEBUGx509ignoreCN0这个报错原因是生成证书没有开启SAN扩展go 1.15 版本开始废弃 CommonName因此推荐使用 SAN 证书。 这就是1.6、1.9两节配置文件最下面做的事情。重新把证书生成一下。当然自己生成的证书可以随便改如果线上证书出现这种情况我看有的说设置下环境变量GODEBUG 为 x509ignoreCN0不过我测试没有效果这个问题的解决要感谢下面这个博主我是看了这个帖子解决的问题。https://blog.csdn.net/weixin_40280629/article/details/1135633514.3 安全提示参考2.3解决办法4.4 证书commonName这个字段是比较重要的不要随便配置。服务端、客户端证书认证都会验证host name是否与其一致不一致会造成认证失败。这也是为什么要修改hosts并用server.com来访问睡觉睡觉。。。
http://www.hkea.cn/news/14560347/

相关文章:

  • 提供定制型网站建设小米路由器wordpress
  • 怎样php网站建设前端开发人员怎么做网站
  • 网站网站服务器专注昆明网站推广
  • 云南安宁做网站的公司珠海网站建设珠海易推网
  • 备案期间网站关闭百度搜索官网
  • 做直播教程的网站有哪些单位邮箱怎么注册
  • 郑州北环附近网站建设网站备案依据
  • 响应式网站断点网站建设拓扑图
  • 微小店网站建设用途织梦商城模板
  • wordpress 星 评分seo网站优化代码
  • 企业网站seo模板外贸网站商城建设
  • 高中教做网站的软件会计公司网站模板下载
  • 网站开发 认证网站建设微信商城网站制作
  • 免费在线响应式网站自助建站合肥网站建设是什么意思
  • 网站首页样式怀化seo公司
  • 一流的福州网站建设安全网站开发
  • 插画师个人网站是怎么做的开发商城网站
  • 网站开发的一般流程建站快车的应用场景
  • flash网站源码免费下载广州网站网站建设
  • 建网站服务商西安网站微信开发
  • 企业内部网站制作企业电话名录
  • 陕煤建设集团韩城分公司网站老王传奇新开网站
  • 公司网站应该是市场部做吗重庆制作网站软件
  • 建网站 主机店名logo设计在线生成
  • 网站索引量上海杨浦网站建设
  • 网站建设公司需要具备什么自己建还是找代理建网站
  • 微博优惠券网站怎么做的可以免费追剧的app
  • 益阳seo网站建设百度seo优化招聘
  • 做网站需要多大的内存厦门网站排名
  • 徐州专业建站公司wordpress广告联盟插件