Arsenal đã chính thức công bố việc ký hợp đồng với tiền vệ Fabio Vieira từ Porto với giá 34 triệu bảng. Anh sẽ khoác áo số 21 tại CLB mới.
Đang xem: Top 13+ số áo vieira ac milan mới nhất 2022
Tiền vệ 22 tuổi đã ký hợp đồng 5 nămsau khi Pháo thủ đồng ý thỏa thuận trị giá 34 triệu bảng với Porto. Điều đó bao gồm 30 triệu bảng trả trước và 4 triệu bảng phụ phí. Vieira là bản hợp đồng thứ hai của câu lạc bộ trong mùa Hè sau tiền đạo người Brazil – Marquinhos.
Tuyển thủ Bồ Đào Nha là một phần quan trọng của đội bóng đã giành được chức vô địch Primeira Liga mùa trước, chức vô địch thứ hai của anh tại Porto. Vieira rời đội bóng Bồ Đào Nha với 75 lần ra sân và 3 danh hiệu, bao gồm 1 Cúp Quốc gia và 2 chức VĐQG.
Vieira đã đạt được nhiều danh hiệu cá nhân khác nhau trong thời gian ở Porto. Anh được vinh danh là Tiền vệ của tháng tại Primeira Liga vào tháng 4 năm 2022 và được công nhận là Cầu thủ xuất sắc nhất giải U21 EURO mùa hè năm ngoái, giúp Bồ Đào Nha lọt vào trận chung kết trước khi thua Đức 0-1.
Phát biểu sau khi ký hợp đồng với Vieira, HLV Mikel Arteta cho biết: “Tôi rất vui mừng vì chúng tôi đã xác định và ký hợp đồng với một tài năng đặc biệt như vậy. Fabio là một cầu thủ rất sáng tạo sẽ mang lại chất lượng cao và sự linh hoạt cho lối chơi tấn công của chúng tôi. Chúng tôi hoan nghênh Fabio và gia đình của cậu ấy đến với câu lạc bộ và rất mong được bắt đầu làm việc với cậu ấy trước mùa giải mới”.
Xem thêm: 10 mẫu ghế nhựa tựa lưng duy tân, 10 mẫu ghế nhựa tựa lưng cao cấp trên thị trường
Trong khi đó, Giám đốc kỹ thuật Edu cho biết: “Chúng tôi rất vui mừng khi hoàn tất việc ký hợp đồng với Fabio từ FC Porto. Fabio là một cầu thủ có tố chất đặc biệt, rất thoải mái khi cầm bóng ở 1/3 cuối sân. Tất cả chúng tôi đều mong muốn được làm việc với cậu ấy và tận hưởng những đóng góp trong tương lai của cậu ấy cho Arsenal. Bây giờ chúng tôi sẽ tiếp tục làm việc chăm chỉ và mong muốn kết thúc kỳ chuyển nhượng này một cách mạnh mẽ nhất có thể”.
Cá nhân Vieira cũng bày tỏ sự vui mừng khi gia nhập Arsenal. “Tất nhiên là tôi rất vui”, anh nói trên trang web của câu lạc bộ. “Đây là một bước tiến quan trọng trong sự nghiệp của tôi. Arsenal là một câu lạc bộ lớn và có bề dày lịch sử, vì vậy tôi rất vui khi có mặt tại ngôi nhà mới của mình”.
Về lý do gia nhập Arsenal, Vieira cho biết: “Như tôi đã nói, Arsenal là một câu lạc bộ có bề dày lịch sử của Anh. Đó là một trong những câu lạc bộ lớn nhất thế giới. Mọi người đều biết rằng Arsenal là một đội bóng tuyệt vời. Đó là một trong những yếu tố chính khiến tôi lựa chọn Arsenal. Tôi thực sự thích cách chơi của đội và tôi rất nóng lòng được bắt đầu”.
Vieira sẽ mặc chiếc áo số 21 ở Arsenal, chiếc áo đã bị Calum Chambers bỏ trống sau khi anh chuyển đến Aston Villa vào tháng Giêng. Cầu thủ người Bồ Đào Nha sẽ hội quân với các đồng đội mới của mình trước chuyến du đấu trước mùa giải đến Mỹ, nơi họ sẽ đối đầu với Everton, Chelsea và Orlando City.
Xem thêm: Những Phần Mềm Không Thể Bỏ Qua Dành Cho Android Tv Box Người Dùng
R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。
要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。
关于作者:
gmail.com
转载请注明出处:https://webmuanha.com/r-crypto-aes-rsa/
前言
我们在日常的数据通信过程中,互联网各种应用软件,虽然让我们越来越方便,但也存在各种隐私泄露,数据被盗取的情况。基于我们对RSA、AES和证书的知识,结合R语言工具,自治一个数据通讯系统吧,保证自己在和别人传输数据过程中的数据隐私。
由于最近对密码学产生兴趣,让用R语言做一个密码学的访问,因此对R语言中openssl包进行了研究,本文为openssl的第四篇文章,用R语言实现RSA+AES混合加密。openssl的文章分别是,R语言进行非对称加密RSA,R语言进行AES对称加密,R语言配合openssl生成管理应用x509证书,用R语言实现RSA+AES混合加密
加密算法涉及到密码学的很多深入的知识,我并没有深入研究,本文只针对于openssl的使用,如果有任何与专业教材不符合的描述,请以专业教材为准。
目录
用openssl生成秘钥key
RSA+AES混合加密
1. 用openssl生成秘钥key
用openssl包,有6种秘钥的生成方案,分别是aes秘钥,rsa秘钥,dsa秘钥,ec秘钥,x25519秘钥,ed25519秘钥。
aes_keygen(length = 16),AES对称加密,只有一个秘钥。rsa_keygen(bits = 2048),RSA非对称加密,包括公钥和私钥。dsa_keygen(bits = 1024),DSA非对称加密,包括公钥和私钥。ec_keygen(curve = c(“P-256”, “P-384”, “P-521”)),椭圆曲线非对称加密,包括公钥和私钥。x25519_keygen(),非对称加密,包括公钥和私钥。ed25519_keygen(),非对称加密,包括公钥和私钥。
生成AES的秘钥
# 生成秘钥> aes str(aes) “aes” raw <1:16> e0 ad 28 fa …生成RSA公钥和私钥
code># 生成秘钥> rsa str(rsa)List of 4 $ type : chr “rsa” $ size : int 2048 $ pubkey:List of 5 ..$ type : chr “rsa” ..$ size : int 2048 ..$ ssh : chr “ssh-rsa AAAAB3Nza
C1yc2EAAAADAQABAAABAQCt7BCa
Sxv
C4Uk
Pi
Dcwr
ZFgli
C960t+uo+c
GMRivq …” ..$ fingerprint: “hash” raw <1:32> c4 d5 8b 62 … ..$ data :List of 2 .. ..$ e: “bignum” raw <1:3> 01 00 01 .. ..$ n: “bignum” raw <1:257> 00 ad ec 10 … $ data :List of 8 ..$ e : “bignum” raw <1:3> 01 00 01 ..$ n : “bignum” raw <1:257> 00 ad ec 10 … ..$ p : “bignum” raw <1:129> 00 e7 61 0c … ..$ q : “bignum” raw <1:129> 00 c0 6d d7 … ..$ d : “bignum” raw <1:256> 2e 20 dc 4e … ..$ dp: “bignum” raw <1:128> 4b 61 43 ce … ..$ dq: “bignum” raw <1:129> 00 92 1c 55 … ..$ qi: “bignum” raw <1:129> 00 af 11 51 …# 获得公钥> rsa$pubkey<2048-bit rsa public key>md5: c4db98bb1d161082cc41b56b5863cce9sha256: c4d58b626f4e7ebc20fe12830bd7e1b647ef12151672008eaf9bf709bdbeee50其他的非对称加密算法的生成公钥和私钥的代码,与RSA的代码结构是一致的。
2. RSA+AES混合加密
在前面两篇文章中,我们已经分别掌握了AES对称加密技术和RSA非对称加密技术,两种技术其实都自己的特征和使用的场景。
AES对称加密技术,加密和解密使用同一个密钥,加密速度快,密钥最长只有256个bit,执行速度快,易于硬件实现,但只有一个秘钥,一方泄露就会不安全。RSA非对称加密技术,使用公钥加密和私钥解密,加密速度慢,私钥长度可以设置1024bit,2048bit,4096bit,长度越长,越安全,但是生成密钥越慢,加解密也越耗时。
结合上面两种加密技术的特征,我们可以设计一套RSA+AES混合加密方案,让数据加密传输能够使用到两种技术的优点。
方案优势:
单纯的使用 RSA(非对称加密)方式的话,效率会很低,因为非对称加密解密方式虽然很保险,但是过程复杂,需要时间长;但是,RSA 优势在于数据传输安全,且对于几个字节的数据,加密和解密时间基本可以忽略,所以用它加密 AES 秘钥(一般16个字节)再合适不过了;单纯的使用 AES(对称加密)方式的话,死板且不安全。这种方式使用的密钥是一个固定的密钥,客户端和服务端是一样的,一旦密钥被人获取,那么,我们所发的每一条数据都会被都对方破解;但是,AES有个很大的优点,那就是加密解密效率很高,而我们传输正文数据时,正号需要这种加解密效率高的,所以这种方式适合用于传输量大的数据内容;
我从互联网找了RSA+AES混合加密的一个设计思路,RSA+AES的混合加密时,AES用于给传输的数据加密,然后通过RSA给AES的秘钥加密,所以接收到数据后,就需要先解密得到AES的秘钥,然后通过AES秘钥再去解密得到数据。
我画了一个示意图:
操作步骤:
第1步,B系统:一次性,生成RSA私钥(rsa_key)和公钥(rsa_pubkey)。第2步,A系统:一次性,生成AES秘钥(aes_key),获得把RSA公钥(rsa_pubkey),用RSA公钥对AES秘钥加密,生成(aes_key_mi)。第3步,B系统:一次性,获得把加密后的AES秘钥(aes_key_mi),用RSA私钥(rsa_key)对AES私钥解密,得到(aes_key2)。第4步,A系统:生成获得数据(dat)并进行序列化(dat_serial),用AES秘钥(aes_key)进行加密生成(dat_mi)第5步,B系统:获得加密后的数据(dat_mi),用AES秘钥(aes_key2)进行解密(x_serial2),再反序列化获得原始数据(dat2)。
接下来,我们用R语言来模拟实现。
第一步,B系统:一次性,生成RSA私钥(rsa_key)和公钥(rsa_pubkey)。
# RSA私钥> rsa_key rsa_pubkey 第2步,A系统:一次性,生成AES秘钥(aes_key),获得把RSA公钥(rsa_pubkey),用RSA公钥对AES秘钥加密,生成(aes_key_mi)。
# RSA公钥> rsa_pubkey<2048-bit rsa public key>md5: 2fbb4bada8e942967577155c8d0e3251sha256: 29e6aaabfd49fe884c505ed12130eb61d32090e8251503b2f69bb06a6c23c3c5# AES秘钥> aes_key aes_key_mi 第3步,B系统:一次性,获得把加密后的AES秘钥(aes_key_mi),用RSA私钥(rsa_key)对AES私钥解密,得到(aes_key2)。
code># 获得加密后的AES秘钥> aes_key_mi# 用RSA私钥对AES私钥解密> aes_key2第4步,A系统:生成获得数据(dat)并进行序列化(dat_serial),用AES秘钥(aes_key)进行加密生成(dat_mi)。
> # 原始数据> dat dat_serial dat_mi 第5步,B系统:获得加密后的数据(dat_mi),用AES秘钥(aes_key2)进行解密(x_serial2),再反序列化获得原始数据(dat2)。
# 获得加密数据> dat_mi# 解密> dat_serial2 dat2有了本文的思路基础,接下来就可以自己设计一套软件程序了,把重要的信息加密,给对的人,也不怕中间过程被截获了。话说微信传输,已经没有隐私可言了,只能信自己了。
本文是介绍openssl包使用的第四篇文章,原想着R语言做密码学知识到哪天才能用上,没想到马上就用上了。
转载请注明出处:https://webmuanha.com/r-crypto-aes-rsa/
gmail.com
转载请注明出处:https://webmuanha.com/r-crypto-openssl-cert/
前言
openssl工具博大精深,本文尝试了使用 openssl 的命令行工具结合R语言中的openssl包的工具,进行了秘钥生成,证书生成,证书管理,证书下载,证书验证等的功能尝试,对秘钥和x509证书进行生成、管理和应用。本文为openssl的第三篇文章,R语言配合openssl生成管理应用x509证书。
由于最近对密码学产生兴趣,使用R语言做一个密码学的研究,因此对R语言中openssl包进行了研究,openssl的文章分别是,R语言进行非对称加密RSA,R语言进行AES对称加密,R语言配合openssl生成管理应用x509证书,用R语言实现RSA+AES混合加密。
加密算法涉及到密码学的很多深入的知识,我并没有深入研究,本文只针对于openssl的使用,如果有任何与专业教材不符合的描述,请以专业教材为准。
目录
X.509证书的基本知识用 openssl 命令工具生成证书用 R语言进行证书管理获取网站证书并验证
1. X.509证书的基本知识
在互联网应用中,为保证服务器端和客户端的相互信息、数据安全等的要求,做大量使用到证书用来确认双方身份。X.509证书主要用于识别互联网通信和计算机网络中的身份,保护数据传输安全。
X.509证书的结构优势在于它是由公钥和私钥组成的密钥对而构建的。公钥和私钥能够用于加密和解密信息,验证发送者的身份和确保消息本身的安全性。基于X.509的PKI最常见的用例是使用SSL证书让网站与用户之间实现HTTPS安全浏览。X.509协议同样也适用于应用程序安全的代码签名、数字签名和其他重要的互联网协议。
证书文件的常用的扩展名和秘钥扩展名。
.crt .cer .der,证书文件(Certificate),通常是DER二进制格式的.pem,der编码的证书再进行Base64编码的数据存放在”—–BEGIN CERTIFICATE—–“和”—–END CERTIFICATE—–“之中.key,密钥文件,私钥和公钥匙.csr,证书认证签名请求(Certificate signing request)
在本地的window环境中,可以运行 certmgr.msc 来查看本地系统中,所有提前预制的CA机构证书。
2. 用 openssl 命令工具生成证书
我们来模拟一下网站向CA申请证书的互联网应用场景,由于并不是去真实的CA机构申请证书,我们可以把CA机构一起进行模拟。自己设定一个CA机构生成一个CA机构证书,再生成一个自己网站(webmuanha.com.me)的证书,然后用CA的证书对自己的网站证书进行签名,来模拟一个实际网站申请证书的过程。
我接下来通过命令行openssl工具生成证书。本机环境为window10,通过安装Git工具,使用自带的Mingw64的工具中的openssl环境。
# 查看openssl 版本dan
Dan
Zhang MINGW64 /c/work/R/encrypt/n1$ openssl version
Open
SSL 1.1.1d 10 Sep 20192.1 生成CA根证书的步骤我们要生成自签名的证书,所以我们需要自己扮演CA,作为CA颁发证书的机构。
操作步骤:生成CA私钥(ca.key)–>生成自签名得到根证书(.crt)
第一步,生成CA私钥(ca.key),生成CA认证机构的证书密钥key。使用命令:openssl genrsa -out ca.key 2048参数:
-out ca.key:将生成的私钥保存至ca.key文件。2048为要生成的私钥的长度。
# 生成CA私钥ca.keydan
Dan
Zhang MINGW64 /c/work/R/encrypt/n1$ openssl genrsa -out ca.key 2048Generating RSA private key, 2048 bit long modulus (2 primes)…………………………………………………………………..+++++………………………….+++++e is 65537 (0x010001)# 查看生成的ca.key的内容$ cat ca.key—–BEGIN RSA PRIVATE KEY—–MIIEow
IBAAKCAQEA1i
Lm
Je
JHYe
Vutw6Ui+V/t
Zs2SS4GFz
TWRko
Rmmt4Z+5j
QMt/dv94Wbjm
Kyv
NNr
Xi
Ni
Gz1j
ZQsw2Bj+22r
SKj
GEh4Qipjpcc+AOfl99V3di
H8YM/cwj6d
NFKqqmp
JHtz
DSbh
Oud
Pbw
Ds
Fugq3dy
Vs
V1h
MKrl
EBet
I7Qj/8k
ZSie1KL+QS00G+ISCHUes8f/e
FHgd7s
MXp
Ob65NJh
AKZGSe
T49V+Ie
F1M82VJEy
V+x1p/C3pp
AL9PTt3RFft
TQJj
XW48t
If
S3R85E0libye
Qnlx
M3sl
Ef2Un
O16wq/7j3Km
Wi
PD9vmt
Pnh
Nj
Kb
Br6Pbt
AR+CAs
Spxa
VLMp
A1PDydqs
CQIDAQABAo
IBAQDKI22QK3do0TTf
Nr
NBECar
H1Zy
ZDC5r
VXs
Sj
Uty
O+DZIRr
AO5VPbm1MJa
OAC4az
D07Djt+Jg2ty
D0ayb
Ic48q
Dv
L1Q8ETal
Cd
So
ZXzip3Xd
SORn
AZvkr3BS5vxf
J2Dta/fok0mm/gg
EVd
Jl
J41qa0JEr/rw
LGWy
NExe
MJr
SLj
Xmt4S3fk
ZNJ12ic
CRKdde
Fy
TL17LEf6l
ENXole/SWuv
B1+Rh
Zb73e
JVMPTJco
RXul
J0/p
UD2Qx
LMn/Yhv
MVH8A13v9Tipm
S51mw
LPFN8F9BNm2K6QXHg
QLghj
Ybp
Dk1p
RTzj+4Yr6db
WZip
HSWWJy1WKMm93M+5VNu
G6at
KGj/HQ1Ao
GBAPhh
Ixcz
FZxhd4qs6t09Ok
U2a
Ep
GYcd
MGEYFd7OUYhj
UOh
XHUMMCu
UWAq2555Va
Ur
Khlqovp+u
Td
MESop7Ac6gf
SH0y
G1r
TLSi
FCu
Os
Nc
Bx1FKUg
Ch3QOP0Jug
H6y
OJu
Cwy
T1DCoip
Gbq/sjha
Umb+sqw
N+Ihc
Q6v
Cw4Qnp2emvf
Ao
GBANy0zd
G7PIL2i9Rub38+c
R0/r
Fd
ZJFq
WQXv/j1c+o+c
AQfzsk6j
PV5u
R+St+HXyaf
MNu
I7po1mvp7v1UJce
Fryn
ZGqd
S0FNALm
DAny
Sa
Poyhq
Sjk+n
B88Mk
SEc
ACr64Smumw5DHk
U3h
O+hhay
Cz
PIs
ILi
U67j
Xv
IP3F5Gabx
NGUXAo
GAGN+JZx
Jbk
Ky
GDy
If5w
Xxpuq66O1Bb3bk
W2b
Cx
P4QENJ3+q
Ra
Jx1Htnkb
Md
YNLG15GOg
Nez
N0R6UK52VIXa+Xl
C7rq
Xs7Vy
Ggi9Ilu
Ix
A9Oi
Yp6yctr2a
Z2So9vf
JVDu
W6ay
ILFNEh
S5ku6Kk
CJTf0lo
Wt
Iv0c
WE8ZOVBawgg
XFs
Cg
YBWw612Ggl74rit1ox2l
XGacg
Gqh
Rz
Jj/BGcv1C6xk8Itn
OOKMD5h8mx
Yg
TFQ06gv
Ex
Uwcwr
S4+Vk
Thykbf3Soz
ZWo
ZBXFoi
P6ygoc
Nu
KWGW7d
Io
Fvk
BPo
T0cqwl
V3DLQVBg
Yz0IDLARSw
Ejwv
Ksd
OUPTz
Jeunw
E5T9Yw
I2ov
Ra
GQKBg
F0zysx
Im
Svn
C8j
QFB5+jw5d
Cn
P8g
XDlj
ZPDJhxwlkb
Nc85ik
A27v
Sk
Q+ql0YOsgka3DH4ISOp
MGJXa
CTk
I86OXt
Ll
G0HBj
Lgiiy
YQn
Fie
Q1x
PB3Pf
CPKWHl
G84Tm
LUw9ux
C08j
V0r7Uf
IDBxv7k
NGDLJqy
Tms
CYON9EXbbt03ac—–END RSA PRIVATE KEY—–第二步,生成自签名得到根证书(ca.crt),CA的基本信息,生成证书时填入的信息,包含国家,地区,公司,域名等信息。使用命令:openssl req -new -x509 -key ca.key -out ca.crt -days 365参数说明:
-new :说明生成证书请求文件-x509 :说明生成自签名证书-key :指定已有的秘钥文件生成秘钥请求,只与生成证书请求选项-new配合。-days:证书有效天数-out :-out 指定生成的证书请求或者自签名证书名称
# 自签名得到根证书(.crt)dan
Dan
Zhang MINGW64 /c/work/R/encrypt/n1$ openssl req -new -x509 -key ca.key -out ca.crt -days 365You are about to be asked to enter information that will be incorporatedinto 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)
Email Address <>:bsspirit
gmail.com2.2 生成用户证书的步骤接下来,生成我自己的博客的 webmuanha.com.me 网站的秘钥,然后生成证书请求,用CA的证书进行签名,最后自己网站的证书。。
生成私钥(.key)–>生成证书请求(.csr)–>用CA根证书签名得到证书(.crt)
第一步,生成私钥(webmuanha.com.me.key)
dan
Dan
Zhang MINGW64 /c/work/R/encrypt/n1$ openssl genrsa -out webmuanha.com.me.key 2048Generating RSA private key, 2048 bit long modulus (2 primes)…………………………………………………………………………………………………+++++……………………………+++++e is 65537 (0x010001)第二步,生成CSR(Certificate Signing Request)证书请求(webmuanha.com.me.csr)
dan
Dan
Zhang MINGW64 /c/work/R/encrypt/n1$ openssl req -new -key webmuanha.com.me.key -out webmuanha.com.me.csr
You are about to be asked to enter information that will be incorporatedinto 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)
Common Name (e.g. server FQDN or YOUR name) <>:Email Address <>:bsspirit
gmail.com
Please enter the following “extra” attributesto be sent with your certificate request
A challenge password <>:webmuanha.com.me
An optional company name <>:查看CSR文件中的信息,需要用到openssl命令工具来查看
dan
Dan
Zhang MINGW64 /c/work/R/encrypt/n1$ openssl req -text -noout -verify -in webmuanha.com.me.csr
Certificate Request: Data: Version: 1 (0x0) Subject: C = ZH, ST = BJ, L = BEIJING, O = Internet Widgits Pty Ltd, OU = webmuanha.com.me, email
Address = bsspirit
gmail.com Subject Public Key Info: Public Key Algorithm: rsa
Encryption RSA Public-Key: (2048 bit) Modulus: 00:b5:d3:98:e5:0f:57:19:a0:dd:c1:aa:7d:de:55: c7:e7:ae:dc:03:30:68:f8:71:32:8b:c2:14:d8:b3: 31:ec:55:ca:70:fb:e2:17:8b:86:8f:c6:10:4e:fb: 4f:25:80:cf:9b:cf:6d:46:b6:ba:90:8f:a1:68:ba: c2:ef:c4:99:e2:8a:0b:7f:af:7b:37:d7:5c:5a:5f: 0c:10:b3:3a:ab:b1:a6:c0:9d:8a:42:42:68:0c:c3: 07:52:b3:39:c1:8e:9f:dc:7b:c5:88:11:9d:7f:cd: ad:95:27:42:47:a8:af:74:dc:66:df:d7:29:0b:ae: 3c:f6:4a:d2:dc:6b:20:60:5d:59:37:55:c0:48:68: 40:31:67:b5:d6:68:13:ed:f1:b2:70:00:7f:b0:c5: 1a:ba:e3:f5:c4:42:97:ef:1b:68:3c:43:ff:dc:81: 0d:7a:6f:f4:88:60:ce:47:32:7b:64:27:a0:e7:89: e7:fa:60:73:6a:64:77:34:d9:6b:2a:f5:9b:c4:6f: 49:82:84:43:01:8a:ea:90:d6:0b:5c:f1:19:9f:56: c2:c1:df:22:29:28:79:40:5f:72:13:ac:9b:b0:6f: 0b:b6:09:9f:c4:a8:12:5d:51:16:f0:81:e2:41:6a: 2a:74:56:bf:48:77:26:84:f9:57:f3:f9:f4:af:94: 68:bd Exponent: 65537 (0x10001) Attributes: challenge
Password :webmuanha.com.me Signature Algorithm: sha256With
RSAEncryption 10:cf:2f:82:24:a5:48:b0:c9:c2:79:00:eb:ba:70:8f:02:f4: cb:7a:b8:9b:d9:eb:9c:dd:34:03:9e:d7:3a:bd:7d:08:af:11: 2c:a5:3e:0b:40:8c:3e:64:bb:c6:8b:b0:b0:6a:cb:59:b9:9b: e1:a1:d9:bc:ec:10:ed:d8:29:f2:a3:fd:f1:94:c6:4e:26:95: 23:25:28:b7:01:fa:3d:bd:96:8b:b5:e8:f4:6b:c3:b9:67:a9: 29:27:96:18:51:98:3a:45:87:31:35:6c:16:51:be:60:40:6e: 2d:ea:0d:d6:0c:36:6f:5d:24:4e:c1:20:f7:42:7b:9e:62:81: e6:38:88:03:0a:7e:15:01:8e:ab:ac:9b:30:93:21:72:19:bf: 9d:4d:51:ba:30:74:34:4f:1b:30:4d:c8:74:ca:e8:3e:15:a5: ec:2c:0e:79:4f:d1:11:56:0f:da:38:d0:6b:1e:54:ac:50:28: 04:d2:8d:b4:6b:f3:d1:ee:a5:f2:43:6f:4c:73:42:13:df:66: 30:4f:6c:16:6f:99:91:9f:56:ec:c2:99:aa:e1:82:28:2a:ce: e2:4e:9e:95:c4:52:fa:be:7a:8e:1e:32:6f:f9:83:92:c1:8a: da:a8:a1:ef:e6:df:14:bb:16:c0:b9:67:8d:71:43:69:d4:2e: 2d:6a:9d:4cverify OK第三步,用CA根证书签名得到证书。实际过程中,会把上面生成的webmuanha.com.me.csr
R文件发给CA,请求CA签名,从而生成网站证书 webmuanha.com.me.crt。
dan
Dan
Zhang MINGW64 /c/work/R/encrypt/n1$ openssl x509 -req -in webmuanha.com.me.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out webmuanha.com.me.crt -days 365Signature oksubject=C = ZH, ST = BJ, L = BEIJING, O = Internet Widgits Pty Ltd, OU = webmuanha.com.me, email
Address = bsspirit
gmail.com
Getting CA Private Key# 查看证书中的内容$ openssl x509 -in webmuanha.com.me.crt -text -noout
Certificate: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha256With
RSAEncryption Issuer: C = ZH, ST = BJ, L = BEIJING, O = Internet Widgits Pty Ltd, CN = myca.com, email
Address = bsspirit
gmail.com Validity Not Before: Nov 30 09:47:58 2022 GMT Not After : Nov 30 09:47:58 2023 GMT Subject: C = ZH, ST = BJ, L = BEIJING, O = Internet Widgits Pty Ltd, OU = webmuanha.com.me, email
Address = bsspirit
gmail.com Subject Public Key Info: Public Key Algorithm: rsa
Encryption RSA Public-Key: (2048 bit) Modulus: 00:b5:d3:98:e5:0f:57:19:a0:dd:c1:aa:7d:de:55: c7:e7:ae:dc:03:30:68:f8:71:32:8b:c2:14:d8:b3: 31:ec:55:ca:70:fb:e2:17:8b:86:8f:c6:10:4e:fb: 4f:25:80:cf:9b:cf:6d:46:b6:ba:90:8f:a1:68:ba: c2:ef:c4:99:e2:8a:0b:7f:af:7b:37:d7:5c:5a:5f: 0c:10:b3:3a:ab:b1:a6:c0:9d:8a:42:42:68:0c:c3: 07:52:b3:39:c1:8e:9f:dc:7b:c5:88:11:9d:7f:cd: ad:95:27:42:47:a8:af:74:dc:66:df:d7:29:0b:ae: 3c:f6:4a:d2:dc:6b:20:60:5d:59:37:55:c0:48:68: 40:31:67:b5:d6:68:13:ed:f1:b2:70:00:7f:b0:c5: 1a:ba:e3:f5:c4:42:97:ef:1b:68:3c:43:ff:dc:81: 0d:7a:6f:f4:88:60:ce:47:32:7b:64:27:a0:e7:89: e7:fa:60:73:6a:64:77:34:d9:6b:2a:f5:9b:c4:6f: 49:82:84:43:01:8a:ea:90:d6:0b:5c:f1:19:9f:56: c2:c1:df:22:29:28:79:40:5f:72:13:ac:9b:b0:6f: 0b:b6:09:9f:c4:a8:12:5d:51:16:f0:81:e2:41:6a: 2a:74:56:bf:48:77:26:84:f9:57:f3:f9:f4:af:94: 68:bd Exponent: 65537 (0x10001) Signature Algorithm: sha256With
RSAEncryption 7d:5e:a2:f1:c4:91:19:4f:c3:6a:88:7c:33:4b:d8:fc:20:e3: e4:ad:38:23:5e:90:95:46:fe:4a:45:4d:70:58:2a:90:c2:b9: 53:a4:80:90:b4:6d:a5:b9:c0:b0:73:8c:ff:9d:f2:b4:06:93: da:66:67:e2:85:0e:9b:11:64:70:c5:b6:a2:93:8b:3e:00:cb: 1c:34:0c:3a:34:86:16:8b:7a:c6:e4:6a:8e:4f:cb:86:ea:25: 1d:dc:18:1b:c4:74:b0:a5:d1:a4:e7:f6:f4:e8:44:c4:13:e0: a5:b5:3f:c5:54:ae:f3:e4:ee:9a:53:6a:53:73:e3:84:df:65: ac:93:de:94:46:9a:4b:2f:7f:d4:cb:b9:de:ac:9b:72:9b:68: f4:bf:59:e8:79:b0:c5:cd:2a:7c:70:d1:ff:2b:3c:10:0a:8b: d4:36:33:68:d4:d7:1f:0e:16:98:f6:10:eb:a5:23:a8:22:9f: 66:f5:0a:b0:1b:05:54:ab:4c:08:cf:55:c2:46:13:de:b0:e7: 2c:76:6a:3d:5f:ec:44:f0:9c:75:d6:13:ca:d1:20:02:7c:9c: ea:48:58:aa:e2:15:02:37:a3:07:f9:40:89:4e:ba:2a:02:19: a3:e7:9f:65:00:d5:e1:27:dd:63:50:74:30:b8:7b:8b:4b:95: 93:f2:ec:b1查看当前目录中的文件,共5个
dan
Dan
Zhang MINGW64 /c/work/R/encrypt/n1$ lltotal 20-rw-r–r– 1 dan 197121 1448 Nov 30 17:40 ca.crt-rw-r–r– 1 dan 197121 1702 Nov 30 15:26 ca.key-rw-r–r– 1 dan 197121 1294 Nov 30 17:47 webmuanha.com.me.crt-rw-r–r– 1 dan 197121 1096 Nov 30 17:45 webmuanha.com.me.csr-rw-r–r– 1 dan 197121 1702 Nov 30 17:44 webmuanha.com.me.key2.3 查看证书用windows程序打开证书,左边是 webmuanha.com.me.crt证书,右边为ca.crt根证书。
ca.crt根证书,是我们自己的生成的,未获得电脑的信任。通过安装ca.crt根证书,让本机电脑获得信任。webmuanha.com.me.crt证书,用ca.crt根证书颁发的。
这样我们就完成了,就openssl命令行工具生成自制证书的过程,一路下来还是挺顺利的。
3. 用 R语言进行证书管理
本来我是打算用R语言openssl包,重现上面的证书生成的过程,但查了很多资料发现在R中,并没有用于证书生成的函数支持,只能做证书的一些管理和验证。那么,我就把openssl包中,能有关证书支持的函数,做一个介绍。
证书相关的函数:
read_cert,读取证书文件read_cert_bundle,读取证书包read_pem,以pem格式,读证书read_pubkey,读取公钥write_pem,以pem格式,输出秘钥和证书write_pkcs1,以pkcs格式,输出秘钥和证书write_ssh,以ssh格式,输出秘钥和证书ca_bundle,X509证书集合certificates,证书检查cert_verify,证书验证
我们用R语言API来读取刚才生成ca.key秘钥查看秘钥的信息,并比较确认生成key的秘钥格式。
3.1 取读ca.key的私钥使用read_key() 以私钥方式进行读取。
# 以私钥方式进行读取 > cakey str(cakey)List of 4 $ type : chr “rsa” $ size : int 2048 $ pubkey:List of 5 ..$ type : chr “rsa” ..$ size : int 2048 ..$ ssh : chr “ssh-rsa AAAAB3Nza
C1yc2EAAAADAQABAAABAQDWIu
Yl4kdh5 …” ..$ fingerprint: “hash” raw <1:32> c0 3b c0 d3 … ..$ data :List of 2 .. ..$ e: “bignum” raw <1:3> 01 00 01 .. ..$ n: “bignum” raw <1:257> 00 d6 22 e6 … $ data :List of 8 ..$ e : “bignum” raw <1:3> 01 00 01 ..$ n : “bignum” raw <1:257> 00 d6 22 e6 … ..$ p : “bignum” raw <1:129> 00 f8 61 23 … ..$ q : “bignum” raw <1:129> 00 dc b4 cd … ..$ d : “bignum” raw <1:257> 00 ca 23 6d … ..$ dp: “bignum” raw <1:128> 18 df 89 67 … ..$ dq: “bignum” raw <1:128> 56 c3 ad 76 … ..$ qi: “bignum” raw <1:128> 5d 33 ca cc …# 查看ssh格式> ca.ssh ca.der ca.pkcs1 ca.pem再以纯文本方式进行读取ca.key文件,并与PEM和pkcs1格式进行对比,发现key与pkcs1格式项目,这样就明确了ca.key是用pkcs1格式进行存储的。
# 以纯文本方式进行读取> ca.txt identical(paste0(ca.txt,”
“,collapse = “”),ca.pem)<1> FALSE# 比较纯文本格式和pkcs1格式,相同> identical(paste0(ca.txt,”
“,collapse = “”),ca.pkcs1)<1> TRUE3.2 取读ca.key的公钥并输出在ca.key文件中,不仅包括了私钥信息还包括了公钥信息。有2个种方法,可以获取公钥信息。一是使用上面的私钥对象,取出公钥,二是使用read_pubkey()函数进行读取。
首先使用刚刚生成的cakey对象,来获取公钥。
> cakey$pubkey<2048-bit rsa public key>md5: 87be025db1f33785aafa00aa83388a8bsha256: c03bc0d35b4593ff81cde4545b1aa62f80e754545297f30669bdcce29a910a45再使用read_pubkey()函数,来获取公钥。
> cakey_pub identical(cakey_pub,cakey$pubkey)<1> TRUE还没有公钥文件,我们可以输出这个文件,用pkcs1格式
# 输出公钥文件> write_pkcs1(cakey_pub,”./ca_pub.key”)# 读取输出的公钥文件> read_pubkey(“./ca_pub.key”)<2048-bit rsa public key>md5: 87be025db1f33785aafa00aa83388a8bsha256: c03bc0d35b4593ff81cde4545b1aa62f80e754545297f30669bdcce29a910a453.3 取读ca.crt证书文件除了能读取秘钥,还可以进行证书的读取。
# 读取证书文件> file cacrt cacrt
# 以PEM格式查看证书内容> cacrt.pem cacrt.pkcs1 cacrt.txt identical(paste0(cacrt.txt,”
“,collapse = “”),cacrt.pem)<1> TRUE最后,可以把证书重写到一个新文件中,再读取,可得到完成一样的证书数据。
> write_pem(cacrt,”cacrt.crt.bak”)> read_cert(“cacrt.crt.bak”)
4. 获取网站证书并验证
如果我们想让自己的网站支持HTTPS,实现SSL/TLS协议时就需要用到证书;或者当我们想配置github的git的自动权限访问时,也需要使用用到证书;当我们在使用Linux,想进行无密码登陆时,这时也可以用证书。
利用openssl工具,我们可以获得各种网站的证书,查看网站的证书的相关信息,数字签名的信息,通过HTTPS传输的加密算法等信息,最后可以验证证书是否是合法的。
4.1 在浏览器网站证书我们访问R的官方网站,https://www.r-project.org/,网站是HTTPS的,我们可以手动查看网站的证书。在证书中的,证书颁发者,SHA1,SHA256,有效期,公钥等的信息。
我们可以手动下载证书文件,在本地进行打开。
4.2 用R语言来下载证书接下来,我们可以用R语言的程序,来获取证书信息,
# 证书下载> cert 查看当前证书,上级证书,一直到root证书。
> cert<<1>>
取当前证书,看证书的信息。当前证书允许的域名。
# 取当前证书> cert_data cert_data$alt_names<1> “*.r-project.org” “r-project.org” # 查看cert_data的数据结构> str(cert_data)List of 8 $ subject : chr “CN=*.r-project.org” $ issuer : chr “CN=Sectigo RSA Domain Validation Secure Server CA,O=Sectigo Limited,L=Salford,ST=Greater Manchester,C=GB” $ algorithm : chr “sha256With
RSAEncryption” $ signature : raw <1:256> b1 2f f9 a5 … $ validity : chr <1:2> “Oct 23 00:00:00 2022 GMT” “Nov 23 23:59:59 2023 GMT” $ self_signed: logi FALSE $ alt_names : chr <1:2> “*.r-project.org” “r-project.org” $ pubkey :List of 5 ..$ type : chr “rsa” ..$ size : int 2048 ..$ ssh : chr “ssh-rsa AAAAB3Nza
C1yc2EAAAADAQABAAABAQDQ/cx8Hy
MW9SCLJs
C/UKa
Th/Rsk
Q33Leicy0prl
Bc2Dm3Tk/m1Dn7cpw
GZ …” ..$ fingerprint: “hash” raw <1:32> a7 68 11 fb … ..$ data :List of 2 .. ..$ e: “bignum” raw <1:3> 01 00 01 .. ..$ n: “bignum” raw <1:257> 00 d0 fd cc …4.4 查看公钥信息查看公钥信息,使用了RSA的2048位加密,查看公钥的二进制格式,就与网上在看到的公钥内容是一致的。
# 查看公钥为2048位的RSA加密> cert_data$pubkey<2048-bit rsa public key>md5: 6b372d9b5c5759fbb28baf03c609730asha256: a76811fbe1608aeeb74f077b63e07c8fea82fdf4789c01c7b5b975a8958eb12b# 公钥的ssh码> cert_data$pubkey$ssh<1> “ssh-rsa AAAAB3Nza
C1yc2EAAAADAQABAAABAQDQ/cx8Hy
MW9SCLJs
C/UKa
Th/Rsk
Q33Leicy0prl
Bc2Dm3Tk/m1Dn7cpw
GZQrs
S4ak1Ia
V5Wroe
Jj
WUz
Eia
JH5Ky4v
JOGWJYXo
Xw5THDFxraa
Ck4CPd/c
Qu
Fkez
Y6iu
EYORu
NYouk
V9xg
Xhfa
GJN4K8Gan6Hi8sy
Y6Hqn
Oi
St887GUZck
O7TQF3Rish
Plb
Lzx0G17inlhig
DFto
Fen
G/x043Ewk
IFJ6pz1j
A8h/Us29Rw1+853Aw
NZ/n
Opta
UFku6W3u
Xgf4TLYUn6Nz
PSKY6l
J34gp
So
BVQIIU8hjz2Y3cwl
Izg
Qnrw2qlz
Dm
Fmi
Ztj
PTa
Mrv
Bzs5QHfsg
# 验证证书是否真实有效> cert_verify(cert, ca_bundle())<1> TRUE# 查看root证书的机构的前6条> head(ca_bundle())<<1>>
Sign Root CAmd5: 3e455215095192e1b75d379fb187298asha1: b1bc968bd4f49d622aa89a81f2150152a41d829c<<2>>
Signmd5: 9414777e3e5efd8f30bd41b0cfe7d030sha1: 75e0abb6138512271c04f85fddde38e4b7242efe<<3>>
Sign Class 3 Public Primary Certification Authority – G3md5: cd68b6a7c7c4ce75e01d4f5744619209sha1: 132d0d45534b6997cdb2d5c339e25576609b5cc6<<4>>
Trust Rootmd5: acb694a59c17e0d791529bb19706a6e4sha1: d4de20d05e66fc53fe1a50882c78db2852cae474<<6>>
Trust External CA Rootmd5: 1d3554048578b03f42424dbf20730a3fsha1: 02faf3e291435468607857694df5e45b688518684.6 导出密钥或证书使用write_pem() 函数将钥匙或证书导出为标准的base64 PEM格式。对于私钥,可以设置一个密码。
# 查看证书的密文> write_pem(cert_data)<1> “—–BEGIN CERTIFICATE—–
MIIGNz
CCBR+g
Aw
IBAg
IQVDDl
PXe+N3mjx
P1zc
GBexz
ANBgkqhki
G9w0BAQs
FADCB
jz
ELMAk
GA1UEBh
MCR0Ix
Gz
AZBg
NVBAg
TEkdy
ZWF0ZXIg
TWFu
Y2hlc3Rlcj
EQMA4G
A1UEBx
MHU2Fs
Zm9y
ZDEYMBYGA1UECh
MPU2Vjd
Glnby
BMa
W1pd
GVk
MTcw
NQYDVQQD
Ey5TZWN0a
Wdv
IFJTQSBEb21ha
W4g
Vm
Fsa
WRhd
Glvbi
BTZWN1cm
Ug
U2Vydm
Vy
IENB
MB4XDTIy
MTAy
Mz
Aw
MDAw
MFo
XDTIz
MTEy
Mz
Iz
NTk1OVow
Gj
EYMBYGA1UEAww
PKi5y
LXByb2pl
Y3Qub3Jn
MIIBIj
ANBgkqhki
G9w0BAQEFAAOCAQ8AMIIBCg
KCAQEA0P3M
f
B8j
Fv
Ugiyb
Av1Cmk4f0b
JEN9y3on
Mt
Ka5QXNg5t05P5t
Q5+3Kc
Bm
UK7Eu
Gp
NSGl
e
Vq6Hi
Y1l
Mx
Imi
R+Ssu
Ly
Thli
WF6F8OUxwxca2mgp
OAj3f3ELh
ZHs2Oorh
GDkbj
W
KLp
Ffc
YF4X2hi
Te
Cv
Bmp+h4v
LMm
Oh6pzokrf
POxl
GXJDu00Bd0Yr
IT5Wy88d
Bte4
p5YYo
Axba
BXpxv8d
ONx
MJCBSeqc9Yw
PIf1LNv
Uc
Nfv
Odw
MDWf5zqb
Wl
BZLult7l4
H+Ey2FJ+jcz0im
Op
Sd+IKUq
AVUCCFPIY89m
N3MJSM4EJ68Nqpcw5h
Zomb
Yz02j
K7
wc7OUB37IDg
R73OY/w
IDAQABo4IDATCCAv0w
Hw
YDVR0j
BBgw
Fo
AUj
Yxex
FStiu
F3
6Zv5mw
Xhu
AGNYe
Ew
HQYDVR0OBBYEFAn
IMghg
Cgq5Fu
Zg
ZW2gz333Rr0y
MA4GA1Ud
Dw
EB/w
QEAw
IFo
DAMBg
NVHRMBAf8EAj
AAMB0GA1Ud
JQQWMBQGCCs
GAQUFBw
MBBggr
Bg
EFBQc
DAj
BJBg
NVHSAEQj
BAMDQGCys
GAQQBsj
EBAg
IHMCUw
Iw
YIKw
YBBQUHAg
EW
F2h0d
HBz
Oi8vc2Vjd
Glnby5jb20v
Q1BTMAg
GBme
BDAECATCBh
AYIKw
YBBQUHAQEE
e
DB2ME8GCCs
GAQUFBz
AChk
Nod
HRw
Oi8v
Y3J0Ln
Nl
Y3Rp
Z28u
Y29t
L1Nl
Y3Rp
Z29S
U0FEb21ha
W5WYWxp
ZGF0a
W9u
U2Vjd
XJl
U2Vydm
Vy
Q0Eu
Y3J0MCMGCCs
GAQUFBz
AB
hhdod
HRw
Oi8vb2Nzc
C5z
ZWN0a
Wdv
Lm
Nvb
TAp
Bg
NVHREEIj
Aggg8q
Ln
Itc
HJvam
Vj
d
C5vcme
CDXItc
HJvam
Vjd
C5vcmcwgg
F/Bgor
Bg
EEAd
Z5Ag
QCBIIBbw
SCAWs
Ba
QB3
AK33vvp8/x
DIi509n
B4+GGq0Zyldz7EMJMq
Fhj
Tr3IKKAAABh
AKZWJg
AAAQDAEgw
Rg
Ih
AJdfvj
FXb
RU053w
Gk
FTCa6M/FZ9AQXp
IWKw3XGmtclm
PAi
EA6FRxq
IJ2qam2
a
Lj5lvj/Yui
D+oh
Mvae
RL78Tl
At1d
So
Adg
B6Mox
U2Lctti
Dq
OOBSHum
EFn
Ay
E4VN
O9Irw
Tp
Xo1Lr
Ug
AAAYQCm
Viy
AAAEAw
BHMEUCIQCWAMENLl
PBh73q
Moqix/AIwr/g
i
Lr
Kwc4y
Kkc
XNY49b
QIg
QWjhg
Fm/o/QL3Nuoya
Y5Gs0J7BWj
Jr4AHQn14c
Fm
KAAA
dg
Do
Pt
Da
Pv
UGNTLn
Vyi8i
Wv
JA9PL0RFr7Otp4Xd9b
Qa9bg
AAAYQCm
Vh7AAAEAw
BH
MEUCIQCV0v
EGr
O3f/p
H9ew1f
Nw
FE40nr
B17r/8XAwyi
WI5cg7g
Ig
Z3RQ3PKI1z
Fq
pi
W86Xg
Kg
U9En
W1Gj
Nz
KJfxb4SMPu
Jkw
DQYJKo
ZIhvc
NAQELBQADgg
EBALEv+a
Vn
d
C0VLCw+Co
BYt5cp
Wkw
Pf
Kp
Wew
AC9fw2Q9womhmr
N9+C51k
X0JZp
EE2V1o
G5lahp
5f
Ui5Xw
ZRT+/1w
NIz5GDLMbum
Y+m7d
Qp6NE+XAp
YSd/J+Hn
Lo
KAu
VI+Yos
Ot
Hh
F/
07c
MNogi
Vh
Elde
Oweo8Z8Yx
Cmb/Ez
SY30wd
HNNASf5s2TQ0tl
Z1Nz
KTzt/gp
OXDp
jg
QJE4z
Xamym3q
NGDumhb
EWKoz
Qq
LVo2OOYgak8Oke
Dzar48MQdc3vvt
O0B1he
Rh
v
Z2Fez
AFWDf
Hcld
XJK2W/DOppr
E+o
IRjl
YKzt
XG3r/a
Ypu59v
Ms
AIh
GWu
C6Vg2Yx
k8Umv/fh
Aj
Ee/xc=
—–END CERTIFICATE—–
“本文尝试了使用openssl 的命令行工具,和R语言中的openssl包的秘钥和x509证书管理的函数,进行了秘钥生成,证书生成,证书管理,证书下载,证书验证等的功能尝试。里面有不少的密码学的内容,是需要我们先理解后再进行操作的。