银河麒麟服务器操作系统搭建证书服务器并颁发可用于签名的证书步骤说明

news2024/11/26 4:19:42

银河麒麟服务器操作系统搭建证书服务器并颁发可用于签名的证书的方法与前面Centos7上(centos7 使用openssl 配置证书服务器并颁发证书(史上最详细版本)_centos phpinfo显示的openssl配置项为/etc/pki/tls/openssl.c-CSDN博客)是一样的,不过使用的openssl版本不同,可能略微不同。  就还是稍微记录一下吧~~

使用cat /etc/os-release命令获取当前系统版本信息:

一、安装openssl工具

rpm -qa openssl  #如果没有查询到则需要进行安装

yum install -y openssl #如果服务器可联网,yum install 命令安装即可,如服务器不可联网,则使用对应服务器CPU架构的离线安装包,通过命令 rpm -ivh xxx.rpm 命令安装

安装好了openssl工具之后,默认安装目录为:/etc/pki/目录。cd /etc/pki/ 跳转到目录下,ls查看目录结构:

在进行搭建证书服务器之前,需要先了解openssl配置文件的作用。

1.1openssl.cnf配置文件作用简介

openssl工具安装之后,默认配置文件目录为/etc/pki/tls/openssl.cnf,该文件主要设置了证书请求、签名、crl相关的配置。主要相关的伪命令为ca和req。该文件从功能结构上分为4个段落:默认段、ca相关的段、req相关的段、tsa相关的段。每个段中都以name=value的格式定义。

1.1.1配置默认路径

配置默认路径:包括默认的CA路径dir、证书路径certs、crl路径crl_dir、根证书路径certificate、serial文件路径serial、私钥路径private_key等。生成根证书的私钥、证书时可以根据此配置文件里的设置设定文件名,也可以根据自己的需要自行设置文件名,然后再对此配置文件进行修改,将对应的文件名信息改正确。

 一般需要设置的就是:

1)dir             = /etc/pki/CA    设定这个路径 为home路径,所有ca相关的证书都在这个文件夹里

2)certificate     = $dir/XXXX  设定根证书文件路径 ,这是自建证书服务器时需要去生成的。

3)serial          = $dir/serial  这个 就建议就用serial做文件名,即需要在这个路径下生成一个名为serial的文件,并且需要向这个文件中添加初始值

4)private_key     = $dir/private/XXXX  # The private key 设定根证书对应的私钥文件路径

####################################################################

[ ca ]

default_ca      = CA_default            # The default ca section

####################################################################

[ CA_default ]

dir             = /etc/pki/CA           # Where everything is kept

certs           = $dir/certs            # Where the issued certs are kept

crl_dir         = $dir/crl              # Where the issued crl are kept

database        = $dir/index.txt        # database index file.

#unique_subject = no                    # Set to 'no' to allow creation of

                                        # several ctificates with same subject.

new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/cacert.pem       # The CA certificate

serial          = $dir/serial           # The current serial number

crlnumber       = $dir/crlnumber        # the current crl number

                                        # must be commented out to leave a V1 CRL

crl             = $dir/crl.pem          # The current CRL

private_key     = $dir/private/cakey.pem# The private key

RANDFILE        = $dir/private/.rand    # private random number file

(具体路径可根据自己的情况进行配置,然后去生成相关的文件,也可以先生成相关的文件,然后再对此配置文件进行修改,一定要确保配置文件里的路径是正确的,否则可能会报错):

1.1.2规定签发的证书的用途

如规定证书中的密钥用途:这个证书用途的体现在:当使用证书浏览器查看时看到的密钥用法,如通过浏览器---internet选项---内容---证书---详细信息中显示的密钥用法信息,如下图所示:

对应的配置内容为:

当需要在证书的密钥用法中展示数字签名并可用于签名时,就需要将此部分的keyUsage内容开放:

# This is typical in keyUsage for a client certificate.

keyUsage = nonRepudiation, digitalSignature, keyEncipherment

vi /etc/pki/tls/openssl.cnf

1.1.3规定证书信息的匹配情况

具体体现在证书生成证书请求文件时设定的要与根证书设定的一样,如果设定不一样,在做证书签名时就会报错,提示对应设定不匹配。

如:以下配置就要求 countryName、stateOrProvinceName、organizationName三个都是一样的。

对于openssl.cnf文件的更加详细的介绍,可参考其他资料。

二、生成根证书

生成证书的步骤是:生成私钥文件---》生成证书请求文件---》生成公钥证书文件并进行签名。

生成证书的过程中会涉及多个文件,如:私钥文件、证书请求文件、公钥证书文件等,非常容易搞混淆,一定要区分清楚,建议就从文件名、后缀加以区分,否则就真的非常容易踩坑。如私钥就用xxxKey.pem;证书请求文件:xxxreq.pem、公钥证书文件:xxxCert.crt。一定要搞清楚自己的文件到底是哪种类型的!

2.1生成根证书的私钥

openssl genrsa 命令是会用来生成 RSA 私有秘钥,不会生成公钥,因为公钥提取自私钥。生成私钥时是可以指定私钥长度和密码保护。如果需要查看公钥或生成公钥,可以使用 openssl rsa 命令。

 openssl genrsa [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des]

可以通过openssl genrsa 命令查看命令具体参数与用法:

[root@ecs-be9a CA]#openssl genrsa ?

usage: genrsa [args] [numbits]

 -des            encrypt the generated key with DES in cbc mode

 -des3           encrypt the generated key with DES in ede cbc mode (168 bit key)

 -idea           encrypt the generated key with IDEA in cbc mode

 -seed

                 encrypt PEM output with cbc seed

 -aes128, -aes192, -aes256

                 encrypt PEM output with cbc aes

 -camellia128, -camellia192, -camellia256

                 encrypt PEM output with cbc camellia

 -out file       output the key to 'file

 -passout arg    output file pass phrase source

 -f4             use F4 (0x10001) for the E value

 -3              use 3 for the E value

 -engine e       use engine e, possibly a hardware device.

 -rand file:file:...

                 load the file (or the files in the directory) into

                 the random number generator

[root@ecs-be9a CA]#

openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048

生成私钥,私钥中含有公钥,如果需要公钥,需要单独提取公钥 。

如果在openssl genrsa 命令中指定加密算法如 -des3 ,则会提示输入私钥保护密码,那么下次使用这个私钥文件的时候就会提示输入私钥密码,如命令:openssl genrsa -des3 -out test1.key 2048执行效果如下图所示:

2.2生成根证书的证书请求文件

2.2.1准备--创建serial文件

在生成证书请求文件之前,需要形成记录数据的文件index.txt以及最初始的自签名证书的序列号可serial文件:

 touch index.txt  #生成数据记录文件index.txt

向serial中写入证书初始序列号,这个serial文件路径就按照openssl.cnf配置文件中的路径生成就可以。网上很多是向serial中写入01,像这样:

但是,实际上,这个序列号最终是显示到自签名的根证书的序列号里的,像这样:

对于x509证书来说,序列号应该是一个32位的类似uuid的标志证书序列号的,因此,我个人不建议直接向serial中写01,可写一个32位的如:

a87a2d6dec4d07bd9095c9b2ee73b2ea

9579518878956341ccc51615197eb0f3

51b55180d6da29cdbaddf60d9430230a

5ce48cc7f764ad17aa6fe2a1ffab06d5

dd7b4730fa89a66b8edd977415a8b688

1ce7727ba8fb7be4dca36c354d1ae61f

因此,可这样操作:

 echo 9579518878956341ccc51615197eb0f3 >serial

2.2.2生成根证书的证书请求文件

创建证书请求文件使用openssl req命令。

该命令主要的功能有,生成证书请求文件, 查看验证证书请求文件,还有就是生成自签名证书。生成证书请求需要什么:申请者需要将自己的信息及其公钥放入证书请求中。但在实际操作过程中,所需要提供的是私钥而非公钥,建议使用CA的私钥文件/etc/pki/CA/private/cakey.pem来创建待自签署的证书请求文件,虽非必须,但方便管理。在生成证书请求文件时,就会根据配置文件里要求的整合素必须项进行输入设置。另外,还需要将提供的数据进行数字签名(使用单向加密),保证该证书请求文件的完整性和一致性,防止他人盗取后进行篡改。

openssl req命令参数说明:

    -new    :说明生成证书请求文件

     -x509   :说明生成自签名证书

     -key    :指定已有的秘钥文件生成秘钥请求,只与生成证书请求选项-new配合。

     -newkey :-newkey是与-key互斥的,-newkey是指在生成证书请求或者自签名证书的时候自动生成密钥, 然后生成的密钥名称由-keyout参数指定。当指定newkey选项时,后面指定rsa:bits说明产生 rsa密钥,位数由bits指定。 如果没有指定选项-key和-newkey,默认自动生成秘钥。

     -out    :-out 指定生成的证书请求或者自签名证书名称

     -config :默认参数在ubuntu上为 /etc/pki/tls/openssl.cnf, 可以使用-config指定特殊路径的配置文件

     -nodes  :如果指定-newkey自动生成秘钥,那么-nodes选项说明生成的秘钥不需要加密,即不需要输入passphase.

     -batch  :指定非交互模式,直接读取config文件配置参数,或者使用默认参数值    

执行如下命令生成根证书的请求文件:

 openssl req -new -x509 -key  /etc/pki/CA/private/cakey.pem -out careq.pem -days 730 -config  /etc/pki/tls/openssl.cnf   #使用-key指定使用的根证书的私钥文件  /etc/pki/CA/private/cakey.pem,-config指定配置文件 /etc/pki/tls/openssl.cnf ; -days 730指定有效期为730天 ;-out careq.pem指定输出文件为当前命令执行目录下careq.pem

生成证书请求文件时,要求输入配置文件里设定的必须的信息值。如在上文中我配置了要求countryName、stateOrProvinceName、organizationName三个是一致的,因此此时这三者是需要填写,并且需要记住的。其中对于最终生成的根证书来说这些填写的信息最终体现在证书的详细信息中(生成证书请求文件时输入的信息对应的就是使用者信息):

在证书详细信息中、各参数含义如下:

C-----国家(Country Name)

S----省份(State or Province Name)

L----城市(Locality Name)

O----公司(Organization Name)

OU----部门(Organizational Unit Name)

CN----通用名(Common Name)

emailAddress----邮箱(Email Address)

通过 openssl req 命令生成证书请求文件careq.pem :

2.3生成根证书公钥证书并进行自签名

要提供CA自己的证书,测试环境下CA只能自签署,使用"openssl req -x509"、"openssl x509"和"openssl ca"都可以自签署证书请求文件。 自签署的证书就是自签名证书,自签名证书的体现就是:查看证书时,证书的颁发给与颁发者是一致的,如下图所示:

openssl x509 命令:

该X509命令是一个多目的证书效用。它可用于显示证书信息、将证书转换为各种形式、像“迷你 CA”一样签署证书请求或编辑证书信任设置。

执行命令:

openssl req -x509 -new -key /etc/pki/CA/private/cakey.pem -in careq.pem -out cacert.pem -days 3650  -new:表明要使用新的私钥文件 -key:指定签名使用的私钥 -in:指定签名使用的证书请求文件 -out:指定输出的证书的文件信息   -days :指定生成的证书文件的有效期

进行自签名:

做完自签名之后,我们就可以得到一个自签名根证书了。

2.3.1pem格式证书转换crt

注意:按照前面操作的步骤我们得到的是一个PEM后缀格式的根证书的公钥证书文件cacert.pem,对于后续的个人证书的签发没有影响,但对于windows操作系统来说,是不能直接使用的,如果需要在windows上导入证书存储区需要做一个格式转换。

openssl x509 -outform der -in cacert.pem -out cacert.crt

前面我们提到,在证书的配置文件中规定了证书的信息匹配问题,主要体现在这里,生成证书请求文件时输入的信息与签名用的根证书信息不匹配时可能会报错。例如下图所示就是因为生成证书请求文件时候输入的stateOrProvinceName不一致提示了:The stateOrProvinceName field needed to be the same in the CA certificate(XXXX) and the request(XXX):

在完全生成了需要的根证书的私钥文件、证书请求文件、根证书之后,我们就可以再次确认一下配置文件 /etc/pki/tls/openssl.cnf里的私钥文件路径、根证书路径是否是对的。

做完以上操作就已经完成了根证书的设置,接下来只需要进行需要个人证书的私钥生成、证书请求文件的生成、公钥证书的生成、生成需要的pfx格式证书文件、抽取需要的证书链p7b文件,最后通过结合使用pfx格式证书以及p7b证书链,只要能完整的验证证书的完整性,证书目的是可用于签名的就算是达到目的了

三、生成需要使用的可用于签名的证书

与生成根证书的过程类似,都是:生成私钥文件---》生成证书请求文件---》生成公钥证书文件并进行签名。不一样的地方在于,签署证书使用的是前面产生的根证书的相关文件。具体步骤如下。

3.1生成签名证书的私钥

执行如下命令生成签名证书需要的私钥文件:

openssl genrsa -des3 -out testkey.pem 2048

 -des3参数表示加密算法为des3 需要输入即将生成这个私钥文件testuser2key.pem的加密密码,请牢记这个密码,后续需要使用到。现象如下 ,提示输入加密密码并确认输入,两次输入的信息必须是一致的。

3.2生成签名证书的证书请求文件

生成需要使用的签名证书私钥对应的证书请求文件:

openssl  req -new -key testkey.pem -out testreq.pem -days 365 -config /etc/pki/tls/openssl.cnf

 -key 指定当前使用的私钥文件、-out 指定当前要生成的证书请求文件的名字,如上述命令均为指向当前目录下的文件。当使用的密钥文件有加密时,就会提示输入加密使用的密码。之后会提示输入这个证书请求文件的主要信息如:

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:CQ

Locality Name (eg, city) []:cq

Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company

Organizational Unit Name (eg, section) []:

Common Name (e.g. server FQDN or YOUR name) []:test

Email Address []:

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

这些信息最终会在证书的详细信息的使用者中展示。

如下图所示就是在生成证书请求文件时设置的Common Name为testuser1最终签发的证书,Common Name就是指的颁发给即证书使用者信息:

整体过程图如下,使用的密钥有密码,需要输入正确的密码,extra部分为可选内容可直接回车:

生成的证书请求文件:

3.3用Ca的根证书相关文件签发 签名证书的公钥证书文件

生成签名证书的公钥证书文件,在生成根证书的时候采用的是自签名,所以是使用的根证书自己的私钥去做签名。而到这里需要的签名证书的公钥证书文件的时候就需要注意:是用的签名证书的证书请求文件根证书的公钥证书文件、以及根证书的私钥文件来进行签发:

执行命令: openssl ca -in testreq.pem -cert /etc/pki/CA/cacert.pem -keyfile /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/testcert.crt -config /etc/pki/tls/openssl.cnf

 -in 指定当前使用的证书请求文件;-cert 指定当前签发用的根证书的公钥证书文件,-keyfile 指向当前使用的根证书公钥文件对应的根证书私钥文件;-out 指定即将生成的公钥证书文件名,不指定目录的情况下均为当前目录。

这样就得到了crt后缀的公钥证书文件了。

3.4生成签名证书的pfx格式文件

 openssl pkcs12 -export -inkey testkey.pem -in testcert.crt  -out test.pfx

-in 使用的是签名通过证书请求文件已签发的公钥证书文件

-inkey 使用的是私钥文件

-out 指定生成的pfx格式文件 不指定路径为当前目录下

导出pfx格式证书文件时,还提示输入的密码就使用此证书文件需要的密码,要牢记。

4.4.1检测生成的证书

        将生成的pfx文件testuser2.pfx、根证书文件caroot.crt通过windows客户端安装检查最终结果如下:

1、双击安装pfx文件:

下一步:

下一步,输入生成pfx设置的密码:

下一步,根据证书类型,自动选择证书存储即可:

点击完成即可。

如果安装的是根证书,则要选择存储区域,将其安装到受信任的根证书颁发机构中的安装的根证书存储位置:受信任的根证书颁发机构里,颁发给与颁发者信息完全一致,是一个自签名的根证书。

查看证书:

生成证书请求文件输入的Common Name信息就是颁发给显示的,详细信息里的使用者信息就是全部输入的信息:

当对应的根证书也安装时就能进行验证:

证书密钥用法含Digital Signature:

四、生成根证书的证书链p7b文件

签名盖章时需要使用p7b文件去验证证书链,这里说的证书链必然是要包含到根证书信息的,因此使用的是根证书的相关文件进行抽取证书链。

生成p7b命令语法:

openssl  crl2pkcs7  [-inform PEM|DER ] [-outform PEM|DER ] [-in filename ]

[-out filename ] [-certfile filename ] [-nocrl ]

选项说明:

-inform PEM|DER:输入文件的格式。DER是DER编码的CRL对象。PEM(默认的格式)是base64编码的CRL对象。

-outform PEM|DER:指定文件的输出格式,跟-inform的意思一样。

 -in filename:指定CRL文件,不设置此项则从标准输入中获取。

-out filename:指定输出文件,不设置此项则输入到标准输出。

-certfile filename:指定证书文件,PEM格式的证书文件可以包含多个证书,此选项可以多次使用。

-nocrl:不处理crl。一般情况下,输出文件中包含crl信息,设置此选项时,读取时忽略CRL信息,生成的信息不保护CRL信息。

要导出的是根证书的证书链文件,一定是通过根证书的公钥证书文件导出证书链p7b文件:

执行命令:openssl crl2pkcs7 -certfile cacert.pem -outform DER -out caRoot.p7b -nocrl

至此需要的签名证书 test.pfx、根证书链caroot.p7b均已生成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1393493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

N-140基于springboot,vue协同过滤推荐算法个性化购物商城

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatisredis 本…

Chondrex:Glycosaminoglycans Assay Kit(糖胺聚糖检测试剂盒)

糖胺聚糖(glycosaminoglycans,GAGs)是一种携带负电荷的多糖链,位于大多数结缔组织和许多不同类型细胞的细胞外基质(extracellular matrices, ECM)中以及细胞表面上。由重复双糖单位复合构成的糖胺聚糖可分为…

Kali在Vmware无法连接到网络,配置网络及解决办法

一.问题描述: 打开 Kali,无法连接到网络,虚拟机配置正常的。 尝试 ping 百度,出错: ping baidu.com 提示: ping: baidu.com: Temporary failure in name resolution二.解决办法: 1.首先在vmwa…

FaFu--练习复盘--1

1、输出图形及二维数组应用 1.1.输出图形 描述 编写程序打印n行如下图形&#xff0c;其中1≤n≤500。 输入用例 7 输出用例 具体实现 #include"stdio.h" int main(){int n,i,j;scanf("%d",&n);for(i 1; i< n;…

盘点 Top 10 最好用的开发者工具箱

He3 有 500 工具&#xff0c;支持自定义工具分类&#xff0c;可以在线使用也可以下载客户端到本地&#xff0c;但有部分工具只能下载客户端才能使用&#xff0c;AI 工具需要升级购买积分&#xff0c;页面简洁&#xff0c;没有广告&#xff0c;部分小工具开源&#xff1b;JSON和…

Python vs. Rust:打破三大障碍

在我周围的每个人都知道我是Python 的忠实粉丝。大约15年前&#xff0c;当我对 Mathworks Matlab 感到厌倦时&#xff0c;我开始使用Python。虽然Matlab的理念看起来不错&#xff0c;但在掌握了Python之后&#xff0c;我再也没有回头。我甚至成为了我所在大学的Python传道者&am…

结构体内存对齐的跨平台做法

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 之前写了一篇文章&#xff1a;使用标准C库读文件时需要注意的一个问题&#xff0c;今天发现是错误的。正确的做法是使用#pragma pack预处理指令。示例程序…

idea社区版 MybatisCodeHelperPro插件使用介绍

文章目录 一、插件介绍二、idea社区版安装MybatisCodeHelperPro插件三、问题记录1. DatabaseHelper插件 加载不了部分数据库链接的列信息2. DatabaseHelper插件 数据库列显示顺序错乱3. MybatisCodeHelperPro插件 数据库字段不提示4. MybatisCodeHelperPro插件 特殊字段增加反引…

【北亚企安数据恢复】RAIDZ多块磁盘离线导致服务器崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; ORACLE SUN ZFS某型号存储&#xff0c;共40块磁盘组建存储池&#xff0c;其中的36块磁盘分为三组&#xff0c;每组12块&#xff0c;单个组使用ZFS特有的RAIDZ管理所有磁盘&#xff0c;RAIDZ级别为2&#xff1b;另外的4块磁盘作为全局热备。存储…

高效解决在本地计算机运行ubuntu服务器端的jupyter lab

文章目录 问题解决方案step1step2step3step4 问题 目前&#xff0c;网上没有什么详细的关于在本地计算机上运行服务器端jupyter lab的教程&#xff0c;由于个人计算机计算资源有限&#xff0c;我们需要利用服务器端的GPU实现高效训练 这篇文章将指导您如何使用 ssh 隧道在远…

Python学习从0到1 day4 python基础语法2 格式化输出和输入方法

其实我不是我&#xff0c;我是青山辽阔 ——24.1.14 一、百分号形式的格式化输出 1.普通输出 #1.定义一些变量 name 陈浩南 age 25 address 广州市天河区#2.变量的输出&#xff08;普通输出&#xff09; print(name) print(age) print(address)#3.Python中&#xff0c;还允…

pycharm import torch

目录 1 安装 2 conda环境配置 3 测试 开始学习Pytorch! 1 安装 我的电脑 Windows 11 Python 3.11 Anaconda3-2023.09-0-Windows-x86_64.exe cuda_11.8.0_522.06_windows.exe pytorch &#xff08;管理员命令行安装&#xff09; pycharm-community-2023.3.2.exe 2 c…

Vim命令大全

文章目录 简述&#xff1a;1. **命令模式&#xff08;Command Mode&#xff09;**2. **插入模式&#xff08;Insert Mode&#xff09;**3. **可视模式&#xff08;Visual Mode&#xff09;**4. **末行模式&#xff08;Ex Mode&#xff09;** 详细使用案例&#xff1a;1. **文件…

Qt 状态机框架:The State Machine Framework (二)

传送门: Qt 状态机框架:The State Machine Framework (一) Qt 状态机框架:The State Machine Framework (二) 1、利用并行态避免态的组合爆炸 假设您想在单个状态机中对汽车的一组互斥属性进行建模。假设我们感兴趣的属性是干净与肮脏&#xff0c;以及移动与不移动。需要四个…

Linux 系统之部署 h5ai 目录列表程序

一、h5ai 介绍 1.1&#xff09;h5ai 简介 h5ai 是用于 HTTP Web 服务器的现代文件索引器&#xff0c;专注于您的文件。目录以吸引人的方式显示&#xff0c;浏览它们通过不同的视图、面包屑和树概述得到增强。最初 h5ai 是 HTML5 Apache Index 的首字母缩写&#xff0c;但现在它…

异步Merkle Tree

1. 引言 前序博客&#xff1a; 利用多核的Rust快速Merkle tree Anoushk Kharangate 2023年论文《Asynchronous Merkle Trees》&#xff0c;其对Merkle tree数据结构进行修改&#xff0c;使得可跨多线程异步计算。 开源代码实现见&#xff1a; https://github.com/anoushk1…

2024华数杯国际数学建模B题思路+代码+模型+论文

2024华数杯国际数学建模B题思路代码模型论文&#xff1a;1.17上午第一时间更新&#xff0c;详细内容见文末名片 问题B&#xff1a;光伏电 背景 中国的电力构成包括传统的能源发电&#xff08;如煤炭、石油和天然气&#xff09;、可再生能源发电 &#xff08;如水力发电、风能…

gin+gorm增删改查目录框架

从网上找资料,发现,很多都是直接的结构 路由&#xff0c;后端的controller层&#xff0c;还有model层&#xff0c;都是放在了同一个main.go文件中&#xff0c;如果写项目的话&#xff0c;还得自己去拆文件&#xff0c;拆代码&#xff0c;经过查询和自己总结&#xff0c;下面放…

ssh免密登录 ssh公钥分发 ssh密钥生成

在连接服务器时&#xff0c;我们会被要求输入用户名对应的密码&#xff0c;如下&#x1f447;&#xff1a; 如果我们要登录的服务器是常用服务器&#xff0c;那么每次登录输入密码就会比较麻烦。那么如何免密登录呢&#xff1f;那就需要使用到rsa公私钥认证了。 生成rsa密钥…

vue 指定区域可拖拽的限定拖拽区域的div(如仅弹窗标题可拖拽的弹窗)

<template><div class"container" ref"container"><div class"drag-box" v-drag><div class"win_head">弹窗标题</div><div class"win_content">弹窗内容</div></div><…