日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

openssl、ssh

發布時間:2023/12/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 openssl、ssh 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PKI:公鑰基礎設施,保證服務器向客戶端發送的證書的可靠性;

簽證機構:CA

注冊機構:RA

證書吊銷列表:CRL

證書存取庫:CAB


威瑞信——verisign

GlobalSign

賽門鐵克

AsiaCOM


國際標準化組織定義了證書的標準結構,X.509協議標準:

證書的內容:

證書的版本號;

證書的序列號;

簽名算法ID;

證書擁有者的信息;

證書有效期;

主體名稱;

主體公鑰;

主體的唯一標識;

發證者的唯一標識;

發證者的數字簽名;

擴展信息;


能夠實現SSL/TLS安全協議的應用程序:

OpenSSL(SSL/TLS),gpg(PGP,TLS)


OpenSSL及其組件:

OpenSSL是一個開源實現SSL/TLS的標準;

libcrypto:實現加解密的算法的庫;

libss:實現SSL功能的庫;

openssl:多用途命令行工具;


openssl命令行工具:

眾多的子命令實現各種安全加密功能;


標準命令:

dgst, enc, ca, req, genrsa, rand, crl, passwd, x509,...


消息摘要命令:

使用dgst子命令來調用,為dgst子命令提供加密算法(單向加密算法);


加密命令:

使用enc子命令來調用,為enc子命令提供加密算法(對稱加密算法);


項目案例:

1.使用openssl加密:

對稱加密:openssl enc


openssl enc -ciphername [-in filename] [-out filename] [-e] [-d] [-a/-base64] [-salt]

常用選項:

-ciphername:算法名稱,包括des3,des,aes,rc4,...

-e:加密

-d:解密

-a/-base64:純文本格式編碼;

-salt:加隨機鹽

-in filename:要加密的文件路徑;

-out filename:加密之后的文件的輸出路徑;


加密示例:

~]# openssl enc -e -des3 -a -salt -in /PATH/TO/SOME_FILE -out /PATH/TO/SOME_ENCRYPTED_FILE


~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.des3


解密示例:

~]# openssl enc -d -des3 -a -salt -in /PATH/TO/SOME_ENCRYPTED_FILE -out /PATH/TO/SOME_FILE


~]# openssl enc -d -des3 -a -salt -in fstab.des3 -out fstab


單向加密:openssl dgst

openssl dgst -ciphername /PATH/TO/SOME_FILE


示例:

openssl dgst -md5 fstab


2.使用openssl生成隨機數:

openssl rand命令:


openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num


openssl rand -base64|-hex LENGTH(bytes)


3.生成用戶密碼:

openssl passwd命令:

openssl passwd [-1] [-salt string]?


~]# openssl passwd -1 -salt $(openssl rand -base64 5)


4.公鑰加密算法:RSA,ELGamal;

openssl genrsa命令:生成RSA算法的私鑰

openssl rsa命令:從私鑰中提取RSA公鑰


openssl genrsa [-out filename] [-des] [-des3] [-idea] [-f4] [-3] [numbits]


示例:

~]# (umask 077; openssl genrsa -out myp.key2 4096) 建議使用

~]# (umask 077; openssl genrsa 4096 > myp.key3)


openssl rsa


openssl rsa [-in filename] [-out filename] [-pubout]


示例:

openssl rsa -in myp.key2 -out mykey.pub


5.建立私有CA:(OpenCA)

1.創建CA所在主機的私鑰文件;

2.生成自簽證書;

3.為CA提供必要的目錄級文件及文本格式的文件;

目錄級文件:

/etc/pki/CA/certs

/etc/pki/CA/crl

/etc/pki/CA/newcerts

文本格式文件:

/etc/pki/CA/serial

創建serial文件的時候,需要給該文件提供一個初始序列號,一般01;

/etc/pki/CA/index.txt


CA的專有配置文件:/etc/pki/tls/openssl.cnf


CA公鑰保存位置:/etc/pki/CA/cacert.pem?

CA私鑰保存位置:/etc/pki/CA/private/cakey.pem


創建私有CA的步驟:

1.創建CA的私鑰文件:

~]# (umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)


2.生成自簽證書:

~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem ?-out /etc/pki/CA/cacert.pem -days 3653


-new:生成新證書簽署請求;

-x509:生成自簽證書,專用于私有CA的自簽證書的頒發;

-key:指定CA的私鑰文件的路徑

-out:生成的自簽證書所保存的路徑

-days:設置證書有效期限;單位是天


3.滿足CA所必須的目錄級文件和文本文件的布局:

~]# touch /etc/pki/CA/index.txt

~]# echo 01 > /etc/pki/CA/serial


SSL:https --> http over ssl


全棧HTTPS機制;


https實現方式:

1.在某臺服務器上安裝了httpd程序;

2.創建服務器的私鑰文件:

~]# mkdir /etc/httpd/conf/ssl

~]# cd /etc/httpd/conf/ssl

ssl]# (umask 077 ; openssl genrsa -out /etc/httpd/conf/ssl/httpd.key 4096)

3.生成證書請求文件:

ssl]# openssl req -new -key /etc/httpd/conf/ssl/httpd.key -out /etc/httpd/conf/ssl/httpd.csr -days 3653


4.由CA簽發證書:在CA所在的服務器上完成;

~]# openssl ca -in /tmp/csrs/httpd.csr -out /tmp/csrs/httpd.crt -days 365


5.在CA上查看證書內容:

~]# openssl x509 -in /etc/pki/CA/newcerts/01.pem -noout -serial -subject


吊銷證書:需要在CA上執行;

1.獲取客戶端證書相應的序列號:

~]# openssl x509 -in /etc/pki/CA/newcerts/01.pem -noout -serial


2.吊銷證書:

~]# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem


注意:SERIAL應該換成對應證書的序列號;


3.生成吊銷證書的吊銷編號:第一次吊銷證書的時候,必須做此步驟;

echo "SERIAL" > /etc/pki/CA/crlnumber


注意:SERIAL應該換成對應證書的序列號;


4.更新證書吊銷列表:

~]# openssl ca -genctl -out /etc/pki/CA/ca.crl



使用gpg實現對稱加密

對稱加密file文件

gpg -c file

ls file.gpg

解密file

pgp -o file2 -d file.gpg


使用gpg工具實現公鑰加密

在hostA主機上生成公鑰/私鑰對

gpg --gen-key

在hostA主機上查看公鑰

gpg --list-keys

在hostA主機上導出公鑰到link.pubkey

gpg -a --export -o link.pubkey

從hostA主機上復制公鑰文件到需加密的B主機上

scp link.pubkey hostB:

在需加密數據的hostB主機上生成公鑰/私鑰對

gpg --list-keys

gpg --gen-key


注意:如果系統提醒熵池中隨機數不夠用,可以使用下列命令:

~]# rngd -r /dev/urandom


在hostB主機上導入公鑰

gpg --import link.pubkey

gpg --list-keys

用從hostA主機導入的公鑰,加密hostB主機的文件file,生成file.gpg

gpg -e -r link.pubkey file

file file.gpg

復制加密文件到hostA主機

scp fstab.gpg hostA:

在hostA主機解密文件

gpg -d file.gpg gpg -o file -d file.gpg

刪除公鑰和私鑰

gpg --delete-secret-keys qhdlink

gpg --delete-keys qhdlink


注意:應該先刪私鑰,再刪公鑰;


OpenSSH:

實施遠程登錄的服務器端應用程序;


什么是登錄?


在分時系統中,允許多個用戶同時使用一臺計算機的資源,為了保證安全以及更方便的記錄不用用戶的操作行為,系統為每個用戶建立一個邏輯身份,即用戶的賬戶標識;為了對用戶進行身份核實,還為用戶指定了口令。用戶在使用該系統之前需要輸入這個邏輯標識以及口令,這個驗證過程就叫"登錄"。


遠程登錄:

Telnet:

C/S: 默認不允許管理員直接遠程登錄;

Client:telnet

Server:telnet-server

Socket Pair:23/TCP


安裝telnet-server:本地光盤yum源中;


CentOS 6:關閉防火墻和SElinux

~]# chkconfig telnet on

~]# service xinetd start


CentOS 7:關閉防火墻和SElinux

~]# systemctl start telnet.socket


注意,telnet默認不允許root用戶直接登錄;


SSH: Secure SHell,安全的shell;

用于取代較早的非常不安全的telnet協議;


C/S:22/TCP


Client:OpenSSH(ssh,scp,sftp),Xshell,SecureCRT,sshsecureshellclient,putty


Server:OpenSSH(sshd), dropbear(dropbear)


SSH協議:

V1:不安全,禁用;

V2:當前安全的應用協議;


SSH提供的認證方式:

基于口令的認證;

基于密鑰的認證;

用戶提供一對兒密鑰,私鑰保存在客戶端,公鑰保存在遠程服務器端某個用戶的家目錄下;


OpenSSH應用程序具體使用

Openssh的組成:

服務端程序:sshd,/etc/ssh/sshd_config

客戶端程序:ssh,/etc/ssh/ssh_config;scp,sftp


客戶端程序:

ssh命令:

ssh — OpenSSH SSH client (remote login program)

ssh [options]... [user@]hostname [command]

常用選項:

-l user:指定此次使用哪個用戶進行遠程登錄;如果使用了此選項,則ssh命令中的主機名前面的用戶名需要省略;


注意:如果沒有使用-l選項指定用戶,又沒有在主機名前面加用戶名,則ssh客戶端程序默認使用本地主機當前登錄的用戶的用戶名作為此次遠程登錄的用戶名;


-p port:指明用于訪問遠程服務器的目標端口號;

-b bind_address:指明此次訪問的服務器的固定源IP地址;

-X:支持X11轉發;

-Y:支持受信任的X1轉發;


ssh遠程連接服務器時的配置選項非常復雜,這些選項都可以定義在ssh的配置文件中:/etc/ssh/ssh_config

其格式:

HOST pattern

OPTION1 VALUE

OPTION2 VALUE

...


基于密鑰的認證機制:

用戶提供一對兒密鑰,私鑰保留在客戶端,公鑰分發并保留至遠程服務器端某個用戶的家目錄中;


1.創建密鑰對兒:

ssh-keygen命令:

ssh-keygen — authentication key generation, management and conversion


用法:

ssh-keygen [-q] [-b bits] [-t type] [-f output_keyfile] [-P passphrase]


常用選項:

-q:靜默模式;

-b bits:指定創建的密鑰的長度;

RSA:最少768bits,默認2048bits;

DSA:明確指定1024bits

ECDSA:256bits,384bits,521bits;

ED25519:忽略-b指定的長度;

-t type:指明公鑰加密算法的類型

在ssh協議V2中可以使用:“dsa”, “ecdsa”, “ed25519”, or “rsa”

-f output_keyfile:指定生成的密鑰文件的路徑;

-P passphrase:指明私鑰的加密密碼;



ssh-copy-id命令:

ssh-copy-id — use locally available keys to authorise logins on a remote machine


用法:

ssh-copy-id [-i [identity_file]] [-p port] [user@]hostname


常用選項:

-i:指定要復制的公鑰文件;

-p port:指定連接到的服務器端的端口;



常用的ssh密鑰驗證的操作過程:

1.生成密鑰對

ssh-keygen -t rsa -P 'passphrase' -f /PATH/TO/KEY_PAIR

2.發送公鑰到目標服務器某個用戶的家目錄:

ssh-copy-id -i /PATH/TO/PUBLIC_KEY user@HOSTNAME

3.遠程登錄:

ssh -l user HOSTNAME

ssh user@HOSTNAME


scp命令:基于ssh連接完成的復制命令;

scp - secure copy (remote file copy program)


兩種使用情形:

推送:Push

scp [options]... SRC HOST:/PATH/TO/DEST


拉取:Pull

scp [options]... HOST:/PATH/FROM/SRC DEST


常用選項:

-r:遞歸復制,復制目錄內容;

-p:保留源文件的權限信息;

-q:靜默模式

-P port:指明遠程主機ssh協議監聽的端口;


sftp:

ftp over ssh;

ftp over ssl(ftps);


C/S架構

S:sftp-server,有sshd服務進程管理的一個子服務項目,是sshd的一個子系統;在CentOS系統中默認是啟用的;

C:sftp命令

sftp [user@]HOSTNAME


sftp> help 獲取幫助


ssh協議客戶端工具:ssh,scp,sftp


ssh協議的服務器端工具:

sshd程序:/etc/ssh/sshd_config


格式:

配置指令 值


常用的指令:

Port 22:指明sshd服務要監聽的端口號;一般在生成環境的服務器端,需要修改這個指令的值為非22號端口;

ListenAddress 0.0.0.0:指明sshd服務進程要監聽的IP地址;建議監聽某個特定的IP地址,以提高安全性;

Protocol 2:選擇ssh協議的版本;

PermitRootLogin yes:是否允許使用root直接完成遠程登錄;在生產環境的服務器中,應該禁用此功能;

UseDNS yes:是否允許使用DNS反向解析主機名;建議關閉此功能;


AllowUsers user1 user2 ...:設置登錄用戶的白名單;

AllowGroups group1 group2 ...:設置組的白名單;


DenyUsers user1 user2 ...:設置登錄用戶的黑名單;

DenyGroups group1 group2 ...:設置組的黑名單;


注意:對于/etc/ssh/sshd_config配置文件做出修改之后,必須讓sshd服務器進程重新讀取該配置文件,才能使新配置生效;

# systemctl reload sshd.service

# service sshd reload


ssh服務的最佳實踐方案:

1.不要使用默認的22號端口;

2.禁止使用sshv1;

3.設置可登錄的白名單或黑名單;

4.設置空閑會話的超時時長;

5.利用防火墻來設置ssh訪問安全策略和規則;

6.僅監聽特定IP地址,不要設成0.0.0.0;

7.如果必須使用口令認證,則使用復雜密碼;

8.建議最好使用基于密鑰的認證;

9.禁止使用空密碼;

10.禁止root用戶直接遠程登錄;

11.限制ssh的訪問頻度和并發數;

12.做好日志,經常分析;


dropbear

ssh協議的另一種實現

輕量級的實現方案,多用于嵌入式環境;


dropbear的rpm包,在EPEL源中;

mirrors.sohu.com/fedora-epel/$releasever/$basearch

mirrors.aliyun.com

mirrors.163.com

mirrors.tsinghua.edu.cn


可以使用dropbear源代碼包進行編譯安裝;

源代碼包可以在https://matt.ucc.asn.au/dropbear/dropbear.html下載;


編譯環境:

yum groupinstall "Development tools" "Server Platform Development"

yum install zlib-devel(可選)


如果選擇了編譯源代碼的方式進行安裝:

1.解壓之后的目錄中,有一個INSTALL的文件,查看該文件以獲得安裝方法

2.~]# ./configure

3.~]# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert"

4.~]# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert" install


啟動dropbear:

dropbear -h

dropbearkey -h

獲取相應的幫助信息;


1.創建保存密鑰文件的目錄:

~]# mkdir /etc/dropbear

2.創建對應密鑰:

~]# dropbearkey -t rsa -s 2048 -f /etc/dropbear/dropbear_rsa_host_key

~]# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key

~]# dropbearkey -t ecdsa -s 521 -f /etc/dropbear/dropbear_ecdsa_host_key

3.啟動dropbear服務,并使其運行于前臺;

~]# dropbear -p IP:PORT -F -E


選項含義:

-p IP:PORT:指定此次啟動的dropbear服務進程監聽的套接字;

-F:將dropbear服務進程運行于前臺;

-E:將dropbear服務進程運行期間產生的信息從標準錯誤輸出而不是寫入到系統日志文件(syslog, /var/log/messages);

-w:禁止root用戶直接登錄到dropbear服務器;


客戶端訪問:

~]# ssh -p PORT user@host

~]# dbclient -p PORT user@host



轉載于:https://blog.51cto.com/12481590/1974892

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的openssl、ssh的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。