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

银河麒麟服务器操作系统搭建证书服务器并颁发可用于签名的证书的方法与前面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均已生成。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

某马头条——day04

自媒体文章自动审核 流程介绍 阿里云接口 这玩意必须要开通企业认证才能用,看看得了。 开通内容安全服务 文本审核接入指南_内容安全(Content Moderation)-阿里云帮助中心 文本审核接口返回内容 直接导入依赖并使用提供的实例代码 接口集成 接口测试 要在weme…

muduo网络库剖析——监听者Poller基类

muduo网络库剖析——监听者Poller基类 前情从muduo到my_muduo 概要框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足;而作为学习者,我们需要抽取其中…

新定义51单片机(RD8G37)实现测距测速仪

本文描述用新定义51单片机(RD8G37)超声波一体测距传感器实现简单的测距测速仪。 测距仪演示效果 新定义RD8G37Q48RJ开发板 超声波测距模块: 8位并口屏 1、main.c unsigned short timeConsuming0; unsigned int oldDistance;void rectClearS…

iOS上h5长按识别图片二维码,图片会默认放大,禁用这一默认行为

iOS上h5长按识别图片二维码&#xff0c;图片会默认放大&#xff0c;禁用这一默认行为 测试代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

变分自编码器(Variational AutoEncoder,VAE)

1 从AE谈起 说到编码器这块&#xff0c;不可避免地要讲起AE&#xff08;AutoEncoder&#xff09;自编码器。它的结构下图所示&#xff1a; 据图可知&#xff0c;AE通过自监督的训练方式&#xff0c;能够将输入的原始特征通过编码encoder后得到潜在的特征编码&#xff0c;实现了…

npm依赖库备份

常用命令 设置默认使用本地缓存安装Nodejs时会自动安装npm&#xff0c;但是局路径是C:\Users\Caffrey\AppData\Roaming\npm默认的缓存路径是C:\Users\Caffrey\AppData\Roaming\npm-cache&#xff1b;查看npm的prefix和cache路径配置信息设置路径 设置默认使用本地缓存 npm con…

MySQL面试题 | 14.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Java NIO (三)NIO Channel类

1 概述 前面提到&#xff0c;Java NIO中一个socket连接使用一个Channel来表示。从更广泛的层面来说&#xff0c;一个通道可以表示一个底层的文件描述符&#xff0c;例如硬件设备、文件、网络连接等。然而&#xff0c;远不止如此&#xff0c;Java NIO的通道可以更加细化。例如&a…

实战 | OpenCV两种不同方法实现粘连大米粒分割计数(步骤 + 源码)

导 读 本文主要介绍基于OpenCV的两种不同方法实现粘连大米分割计数,并给详细步骤和源码。源码和图片素材见文末。 背景介绍 测试图如下,图中有个别米粒相互粘连,本文主要演示如何使用OpenCV用两种不同方法将其分割并计数。 方法一:基于分水岭算法 基于分水岭算法…

【playwright】新一代自动化测试神器playwright+python系列课程18_playwritht元素相关操作_等待元素到某种状态

元素相关操作_等待元素到某种状态 对于自动化测试来说&#xff0c;本质上就是定位元素、操作元素。网页上的元素有不同状态&#xff0c;有些元素本来不在网页的DOM中&#xff0c;经过某一步操作后才出现。有些元素是本来就已经在DOM中但是是隐藏的状态&#xff0c;经过某一步操…

K8S--解决访问Harbor私有仓库无权限的问题(401 Unauthorized)

原文网址&#xff1a;K8S--解决访问Harbor私有仓库无权限的问题&#xff08;401 Unauthorized&#xff09;-CSDN博客 简介 本文解决K8S访问Harbor私有仓库无权限的问题&#xff1a;401 Unauthorized。 问题复现 用Harbor部署了私有仓库&#xff0c;将镜像推送上去。指定私有…

python数字图像处理基础(五)——Canny边缘检测、图像金字塔、图像分割

目录 Canny边缘检测原理步骤 图像金字塔1.高斯金字塔2.拉普拉斯金字塔 图像分割图像轮廓检测1.检测轮廓2.绘制轮廓3.补充 Canny边缘检测 梯度是什么? 梯度就是变化的最快的那个方向 edge cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]…

第90讲:MySQL数据库主从复制集群原理概念以及搭建流程

文章目录 1.MySQL主从复制集群的核心概念1.1.什么是主从复制集群1.2.主从复制集群中的专业术语1.3.主从复制集群工作原理1.4.主从复制中的小细节1.5.搭建主从复制集群的前提条件1.6.MySQL主从复制集群的架构信息 2.搭建MySQL多实例环境2.1.在mysql-1中搭建身为主库的MySQL实例2…

小程序 自定义组件和生命周期

文章目录 ⾃定义组件创建⾃定义组件声明组件编辑组件注册组件 声明引⼊⾃定义组件⻚⾯中使⽤⾃定义组件定义段与⽰例⽅法组件-⾃定义组件传参过程 小程序生命周期应用生命周期页面生命周期页面生命周期 ⾃定义组件 类似vue或者react中的自定义组件 ⼩程序允许我们使⽤⾃定义组件…

设计模式的学习笔记

设计模式的学习笔记 一. 设计模式相关内容介绍 1 设计模式概述 1.1 软件设计模式的产生背景 设计模式最初并不是出现在软件设计中&#xff0c;而是被用于建筑领域的设计中。 1977 年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任 Christopher Alexander 在…

【动态规划】【数学】【C++算法】18赛车

作者推荐 视频算法专题 本文涉及知识点 动态规划 数学 LeetCode818赛车 你的赛车可以从位置 0 开始&#xff0c;并且速度为 1 &#xff0c;在一条无限长的数轴上行驶。赛车也可以向负方向行驶。赛车可以按照由加速指令 ‘A’ 和倒车指令 ‘R’ 组成的指令序列自动行驶。 当…

情人节专属--html5 canvas制作情人节告白爱心动画特效

💖效果展示 💖html展示 <!doctype html> <html> <head> <meta charset=

2023年移远车载全面开花,智能座舱加速进击

作为汽车智能化的关键组件&#xff0c;车载模组正发挥着越来越重要的作用。 移远通信进入车载模组领域近十年&#xff0c;已形成了完善的车载产品队列&#xff0c;不但在5G/4G车载通信、智能座舱、C-V2X车路协同等领域打造了一枝独秀的产品线&#xff0c;也推出了车规级Wi-Fi/蓝…

解决springboot启动报Failed to start bean ‘subProtocolWebSocketHandler‘;

解决springboot启动报 Failed to start bean subProtocolWebSocketHandler; nested exception is java.lang.IllegalArgumentException: No handlers 问题发现问题解决 问题发现 使用springboot整合websocket&#xff0c;启动时报错&#xff0c;示例代码&#xff1a; EnableW…

大数据时代的黄金机遇:阿里云大数据分析师ACP认证【一条龙服务100%通过】

扫码和我联系 随着大数据技术的迅速发展和广泛应用&#xff0c;成为了当今时代最具吸引力的技术之一。为了让更多技术人才把握这一时代机遇&#xff0c;阿里云推出了大数据分析师ACP认证&#xff08;Alibaba Cloud Certified Professional - Data Analyst&#xff09;&#xf…