openssl的應用及私有CA相關內容
PKI:Public Key Infrastructure,公鑰基礎設施;其包含的內容:
1.簽證機構:CA
2.證書註冊機構:RA
3.證書吊銷列表:CRL
4.證書存取庫:CR
國際標準化組織(ISO)定義了證書的結構和認證標準:X.509協議標準:
證書的組成包括:
證書的版本號
證書的序列號
有效期限
簽發算法的ID
簽發CA的名稱
主體的名稱
主體的公鑰信息
主體的唯一標識符
發證者的唯一標識符
發證者的數字簽名
擴展信息
CA如何發揮作用?
1.通信雙方互相交換證書;
2.雙方驗證證書的真偽;
3.雙方協商加密算法;
4.用CA頒發的公鑰解密證書中的CA簽名,能解密就說明證書來源可靠;
6.檢查證書的有效期是否合法,如果在有效期內則證書可用;
7.檢查證書的主體名稱和此次通信的目標是否能夠對應;
8.檢查證書是否被吊銷;
能夠實現上述安全加密功能的協議:
SSL:Security Socket Layer,安全套接字層
1994年,Netscape(網景)公司最先聲明並實施;
SSL V1.0
SSL V2.0
SSL V3.0
TLS:Transport Layer Security,傳輸層安全協議;
IETF:Internet Engineering Task Force,互聯網工程項目小組;
2006年提出TLS V1.1
2008年提出TLS V1.2草案,添加了橢圓曲線加密算法;
分層設計方案:
1.最底層:規定了基礎算法的原語的實現;包括:AES,md5,sha,...
2.向上一層:各種算法的基本實現;
3.再上一層:各種算法組合實現的半成品;
4.最高層:用各種組件拼裝而成的各種成品密碼學協議軟件;
SSL/TLS的handshake的四個階段:
1.客戶端線服務器索要證書並驗證證書;
發送Client Hello的消息,此消息的主要內容:
支持的協議的版本,如:SSL V3.0 ,TSL V1.2
客戶端生成一個隨機數,稍後用於生成會話密鑰;
支持的加密算法,如:DES,3DES,AES,RSA,...
2.雙方協商生成會話密鑰:
發送Server Hello消息,此消息主要內容:
確認使用的協議的版本,如:TLS V1.2
服務器也生成一個隨機數,稍後用於生成會話密鑰;
確認加密算法和壓縮算法;
服務器的證書
3.雙方會采用已經生成的會話密鑰進行安全加密的數據通信:
客戶端驗證服務器證書,再確認無誤後,取出其中的服務器公鑰;
驗證服務器證書的步驟:
驗證發證機構(CA)
驗證證書的完整性
驗證證實書的持有者信息
驗證證書的有效期
驗證CA的吊銷列表中是否有此證書
客戶端發送信息給服務器端:
客戶端再次生成一個隨機數用於公鑰加密;
編碼格式的變更通知,表示以後的信息都將采用雙方已經協商好的加密算法和壓縮算法;
客戶端握手結束;
服務器收到客戶端發送來的第三個隨機數(Pre_Master_key);計算生成此次會話所用到的會話密鑰,並向客戶端發送相關信息;
編碼格式的變更通知,表示以後的信息都將采用雙方已經協商好的加密算法和壓縮算法;
服務器端握手結束;
4.雙方互相結束通信;
OpenSSL:開源的實現SSL/TLS協議的事實標準;
主要有三部分組成:
libcrypt:實現加密和解密算法的庫
libss:實現SSL協議/TLS協議功能的庫
openssl:多用途命令行工具
openssl命令行工具:
眾多子命令實現各種安全加密功能;
標準命令:
enc,dgst,ca,req,genrsa,rand,rsa,x509,passwd,...
對稱加密命令:enc
主要是提供對稱加密算法,以進行數據或文件的手動加密
格式:openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-salt]
-ciphername:加密算法的名稱
-in filename:openssl要讀取的文件路徑
-out filename:加密或解密操作後用於保存結果的文件路徑
-e:加密操作
-d:解密操作
-a/-base64:用純文本格式進行密文編碼;
-salt:隨機加鹽;
示例:
加密文件:
~]# openssl enc -e des3 -in 123.txt -a -out 123.txt.plaintxt
解密文件:
~]# openssl enc -d des3 -out 123.txt -a -in 123.txt.plaintxt
單向加密命令:dgst
示例:
~]# openssl dgst -sha1 fstab
生成隨機數命令:rand
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num
示例:
~]# openssl rand -base64 8
生成帶鹽的密碼:passwd
openssl passwd -1 -salt SALT_STRING
示例:
~]# openssl passwd -1 -salt 456789
Password:
$1$456789$HNo/3Ml2mDyCIeduXf8lU0
公鑰加密算法:genrsa
生成rsa加密算法的私鑰
penssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]
出於安全考慮,需要給創建的私鑰賦予只有擁有者才能讀寫其他任何人都不能讀寫的權限;建議使用下列方法生成私鑰:
~]# (umask 077 ; openssl genrsa -out /tmp/my.key 4096)
~]# (umask 077 ; openssl genrsa > /tmp/my.key 4096)
從已經生成的私鑰文件中抽取公鑰:rsa
openssl rsa [-in filename] [-out filename] [-pubout]
-pubout:抽取公鑰
-in fiename:私鑰文件的路徑
-out filename:公鑰文件的路徑
示例:
tmp]# (umask 077 ; openssl genrsa -out /tmp/my.key 4096)
tmp]# cat my.key
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
[root@localhost tmp]# openssl rsa -in my.key -out mykey.pub -pubout
writing RSA key
tmp]# cat mykey.pub
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxv/oFzpeuSMWQGRvKRuZ
Aqa3PUX5uhbrrp7XHmEFV1kSHRP10bUP3H63viSl4AVwOth7qrLcyNIAq5DTSa4w
MYdDGvVQbLqUWwy6ZjUbMn7f6avqWIloudpyMywNq41UDsU4Z3eDEAJwn2ezWHC9
ud2R0poBi64lLmYQB0mJWIw0z16xBg4eFrcAft507gd23fOw6VFyYmpb7MtioSNO
NCRDXQFcKsE0PguG7w0kDVrnwkLCitWYbEs1qa/uX9nbwXUM2Y5t5rGFYvBKYa86
Vs/YyDCMAx+KxFsQZF8xsZRh/VTo2qAlB5ITOPpHLup4KID9s8Ha62Y68r8683mn
0E2YKXe3Ha3aYyyp2G/XsIfCaNLJujT3S+kIBXuKaOz85cniExcFidu9BGKpzygx
JRaF23qTtS2mwiZ9RL2ZQ6+X6E5DCcd1pZprl0QCYvsLSmu3dr+iXN4BQm2ZAx8G
BtbkD+a5MubF9S2c6ZlOLHgBDP623sKYP1MJKij+JInfB9C20uPHbjIHwsZjFXwK
YbT6x3qsC4CZIMDDjHfPHf0lG3IdsGmD4ac5y9f+N/9GunMt55UvFsIeICihZKwh
IuoN/1rweNuajGwXWzvYtNsZopHG1GQUwFL72Gj0QEyHEE+K2Q6z8wN7A7Mm3Grw
jmv4G+lT0M5akhXOdWRYv3UCAwEAAQ==
-----END PUBLIC KEY-----
利用openssl建立私有CA:
1.創建CA所在主機的私鑰文件;
2.生成自簽證書;
3.必須為CA提供必要的目錄級文件及文本級文件:
目錄級文件:
/etc/pki/CA/certs
/etc/pki/CA/crl
/etc/pki/CA/newcerts
文本級文件:
/etc/pki/CA/serial:保存證書的序列號,一般初始序列號為01;
/etc/pki/CA/index.txt:保存證書索引;
/etc/pki/tls/openssl.cnf:配置文件;
知道了解就好,不一定要會做,在工作中用不太到 前提是知道了解..
創建私有CA的步驟:
1.創建CA的私鑰文件:
(umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048(長度越長安全性越高速度越慢))
2.生成自簽證書:
openssl req 命令:
openssl req [-out filename] [-new] [-key filename] [-x509] [-days n]
3.完善目錄及文本文件結構:
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial
在CA上查看證書內容:
openssl x509 -in /etc/pki/CA/cacert.pem -noout -serial -subject
創建私有CA示例:
tmp]# ls /etc/pki
CA ca-trust java nssdb product product-default rpm-gpg rsyslog tls
tmp]# cd /etc/pki
pki]# cd CA
CA]# ls
certs crl newcerts private
CA]# touch index.txt
CA]# echo 01 > serial
CA]# cat serial
01
CA]# ls
certs crl index.txt newcerts private serial
CA]# ls ../tls/
cert.pem certs misc openssl.cnf private
CA]# (umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
.............+++
.....+++
e is 65537 (0x10001)
CA]# ls private/
cakey.pem
CA]# ll private/
總用量 4
-rw-------. 1 root root 1679 4月 16 15:47 cakey.pem
CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3653
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) [XX]:CN
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:****
Organization Name (eg, company) [Default Company Ltd]:yanshandaxue
Organizational Unit Name (eg, section) []:****
Common Name (eg, your name or your server‘s hostname) []:xuesheng.ll.com
Email Address []:[email protected]
CA]# ls
cacert.pem certs crl index.txt newcerts private serial
CA]# cat cacert.pem
-----BEGIN CERTIFICATE-----
MIIEIzCCAwugAwIBAgIJAPo+gpVhVYoVMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYD
VQQGEwJDTjELMAkGA1UECAwCSEIxGzAZBgNVBAcMEsOnwqfCpsOnwprCh8OlwrLC
mzEVMBMGA1UECgwMeWFuc2hhbmRheHVlMSEwHwYDVQQLDBjDqcKHwozDpMK7woHD
pcKtwqbDqcKZwqIxFzAVBgNVBAMMDnh1ZXNoZW4ubGwuY29tMRswGQYJKoZIhvcN
AQkBFgwxMjM1NEBxcS5jb20wHhcNMTgwNDE2MDc1MzI2WhcNMjgwNDE2MDc1MzI2
WjCBpzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkhCMRswGQYDVQQHDBLDp8KnwqbD
p8KawofDpcKywpsxFTATBgNVBAoMDHlhbnNoYW5kYXh1ZTEhMB8GA1UECwwYw6nC
h8KMw6TCu8KBw6XCrcKmw6nCmcKiMRcwFQYDVQQDDA54dWVzaGVuLmxsLmNvbTEb
MBkGCSqGSIb3DQEJARYMMTIzNTRAcXEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAzZOOAR6S3Yh3MyqRDZapHcF7Kl6AiUAymut/kWdxHh/sp/kT
iUkt2SdrxeX7XsEKH/u2rFGMtCc0WgxRT91ZK0nq0yIiLos6Qap9eqkf+9suPjfu
JbbkeyM6c35E6nIrHIFkJOYItLKyPfQaiHmwzmEdu3Wt0djbjuZmoPuo/asBD2mb
SAfZdXCRe9MiMLBC6fSgJzLhvDE/ii34PTujQO5c0DMqatBR3oMSO+Sq5lXGId6k
BMQgNTShGPZ2fplDUr5Tz564AkJGpf6vYzq58mkMYdK6QrT6H9bJnxavcCFp3Hlj
ExVgKRFFY7omAwZB9yuBLkm1twaUqBVLl4PSUwIDAQABo1AwTjAdBgNVHQ4EFgQU
4ybXtVWQGRyR3SdgotQk3TYyWlYwHwYDVR0jBBgwFoAU4ybXtVWQGRyR3SdgotQk
3TYyWlYwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAZ+KW/aGINtPX
e/LUScxjX1aqVx7TjZA/chrK0miViceaDPrC1NffveYrA77iP57LjObIKpXvSB2H
z0rP3qlrB+bLVbrulwfomfv8IMDdKEO3HmQv2Nv6IRavfyKqEZvRo3dPkTqCbp45
NmeXhjD4ibjFgbew0C7ef4qrG7aRRdb1+XdNfNezHnWDZFseUt0XxP7WNCql2lsr
CiBUrIfmoXLAF+GyavWFwszhwE0fntQtN5z49qtRNjKk3j5NLC15d1FLZ6m+nzOo
D+l33KFuxWXlAOCRiMgbzxStGm6LeFv7MdOJy+foKppQVXogJRtVvatjFOUGQKzZ
BenCF4z6fg==
-----END CERTIFICATE-----
CA]# openssl x509 -in cacert.pem -noout -serial
serial=FA3E829561558A15(序列號)
吊銷證書:必須在CA上執行:
1.獲取客戶端證書對應的序列號:openssl x509 -in /etc/pki/CA/certificate -noout -serial -subject
2.吊銷證書:openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
註意:上述命令中的“SERIAL”是要換成準備吊銷的證書的序列號;
3.生成吊銷證書的吊銷索引文件:僅需要第一次吊銷證書時執行此操作;
echo "SERIAL" > /etc/pki/CA/crl/crlnumber
4.更新證書吊銷列表:openssl ca -genctl -out /etc/pki/CA/crl/ca.crl 不同版本路徑會有所差別!!
5.查看CRL:openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text
實現加密/解密的應用程序:gpg,可以使用gpg實現對稱加密;
gpg2 [--homedir dir] [--options file] [options] command [args]
常用選項:
-c:實施對稱加密
-o file ,--output file:將解密結果保存於指定文件當中;
--gen-key:生成密鑰對,即:公鑰+私鑰
--list-keys:查看公鑰
--export:導出鑰匙環上所有的公鑰,也可以導出指定名稱的公鑰;默認直接將公鑰輸出到標準輸出;需要配合使用-o選項,才能將其保存到文件中;
--import:導入到指定的公鑰鑰匙環;
-r:復制加密文件
-e:加密數據
--delete-key name
--delete-secret-key name
--delete-secret-and-public-key name
刪除公鑰和/或私鑰,刪除密鑰的時候,先刪私鑰,再刪公鑰;
gpg應用示例:
加密文件:
~]# gpg -c fstab
解密文件:
~]# gpg -o fstab.out -d fstab.gpg
註意選項和參數的順序;
生成密鑰對:
~]# gpg --gen-key
查看公鑰:
~]# gpg --list-key
導出公鑰:
~]# gpg -a --export -o /tmp/qhdlink.pub
在其他主機導入公鑰,以進行公鑰加密:
~]# gpg --import /PATH/TO/qhdlink.pub
在其他主機上使用導入的公鑰加密文件:
~]# gpg -e -r qhdlink.pub /PATH/TO/SOME_FILE
openssl的應用及私有CA相關內容