20170909 加密和安全(二)

CA和證書
安全協議(SSL/TLS)
OpenSSH

一、CA和證書

(一) PKI(Public Key Infrastructure) 公鑰基礎設施

  • 定義:支持公開密鑰管理并能支持認證、加密、完整性和可追究性服務的基礎設施

  • 主要組成部分:

    • 簽證機構:CA (Certificate Authority)
    • 注冊機構:RA (Registration Authority)
    • 證書吊銷列表:CRL (Certificate Revocation List)
    • 證書存取庫
  • X.509:定義了證書的結構以及認證協議標準

    • 內容:版本號、序列號、簽名算法、頒發者、有效期限、主體名稱、主體公鑰、CRL分發點、擴展信息、發行者簽名

(二)證書獲取的方法:

  • 證書授權機構簽發的證書:由CA簽發申請者的公鑰
    • 第1步:生成簽名請求(csr)
    • 第2步:將csr發送給CA
    • 第3步:從CA處接受簽名
  • 自簽名的證書:自己簽發自己的公鑰

二、安全協議(SSL/TLS):

(一)協議歷史、功能

  • 發展歷程:

    • SSL(Secure Socket Layer):安全套接字
      • 由Netscape公司于1995年發布SSL 2.0
    • TLS(Transport Layer Security) 安全傳輸層協議1.1:
      • TLS 1.1:IETF(Internet工程任務組) 于2006年將其定義為國際標準RFC 4346
      • TLS 1.2:當前使用最廣泛的標準,2008年發布
      • TLS 1.3:最新標準,2015年發布
  • 提供功能:機密性、認證、完整性、重放保護

  • 位于TCP/IP模型傳輸層之上,應用層之下

(二)協議工作原理

  • SSL/TLS協議是兩階段協議,分為握手階段和應用階段

    • 握手階段(協商階段)客戶端和服務器端認證對方身份(依賴于PKI體系,利用數字證書進行身份認證),并協商通信中使用的安全參數、密碼套件以及主密鑰。后續通信使用的所有密鑰都是通過MasterSecret生成。
    • 應用階段:在握手階段完成后進入,在應用階段通信雙方使用握手階段協商好的密鑰進行安全通信
  • 相關協議:

    • 握手階段:Handshake, ChangeCipherSpec, Alert協議
    • 應用階段:Record協議
  • HTTPS協議:就是“HTTP” 協議”和“SSL/TLS 協議”的組合。HTTP over SSL”或“HTTP over TLS”,對http協議的文本數據進行加密處理后,成為二進制形式傳輸

(三)OpenSSL

  • 開源項目:可以實現對稱加密、公鑰加密、秘鑰管理等豐富功能

  • 對稱加密:openssl enc工具實現

    • 幫助:man enc
    • 語法:
    // 加密
    openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
    
    // 解密
    openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile
    
  • 公鑰加密:openssl rsautl工具實現

    • 幫助:man rsautl
    • 語法:
    // 生成私鑰
    openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
    // 私鑰需要謹慎保管,權限應設置為600
    // 執行umask 066,為避免umask設置影響今后操作,將umask和后續生成私鑰命令用小括號括起
    // 例如以下命令(-des: 私鑰添加口令)
    (umask077; openssl genrsa -out test.key -des 2048) 
    
    //從私鑰中提取出公鑰
    openssl rsa -in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE
    //例如以下命令
    openssl rsa -in test.key -pubout -out test.key.pub
    
  • 單項加密:openssl dgst工具實現

    • 幫助:man dgst
    • 語法:
    openssl dgst -md5 [-hex] /PATH/SOMEFILE     //-hex 默認設置為16進制顯示
    openssl dgst -md5 testfile
    
  • 生成密碼:openssl sslpasswd工具實現

    • 幫助:man sslpasswd
    • 語法:
    openssl passwd -1 -salt SALT(最多8位)  //-1指MD5加密
    openssl passwd -1 -salt centos
    
  • 生成隨機數:openssl sslrand工具實現

    • 幫助:man sslrand
    • 幫助:
    openssl rand -base64|-hex NUM
    NUM: 表示字節數;-hex時,每個字符為十六進制,相當于4位二進制,出現的字符數為NUM*2
    

(四)OpenSSL實現創建CA并申請、管理證書

  • 配置文件
    • openssl的配置文件:/etc/pki/tls/openssl.cnf
      配置文件關鍵信息:
dir             = /etc/pki/CA          //存儲目錄
certs           = $dir/certs           //頒發的證書存儲路徑
crl_dir         = $dir/crl             //證書吊銷列表存儲路徑
database        = $dir/index.txt       //數據庫文件存儲路徑

new_certs_dir   = $dir/newcerts        //新證書存放路徑,與證書存儲路徑中的內容相同,但名稱不同

certificate     = $dir/cacert.pem      //CA自簽發或由上級簽發的證書路徑,名稱必須為"cacert.pem"
serial          = $dir/serial          //下一個簽發證書的序號,一般從16位數字00開始
crlnumber       = $dir/crlnumber       //下一個證書吊銷列表的序號,一般從16位數字00開始
                                  
crl             = $dir/crl.pem         //證書吊銷列表的存放路徑
private_key     = $dir/private/cakey.pem      //私鑰的存放路徑

countryName             = match        //國家信息必須匹配
stateOrProvinceName     = match        //州或省信息必須匹配
organizationName        = match        //域名信息必須匹配
organizationalUnitName  = optional     //部門名稱
commonName              = supplied     //申請證書的主機名稱
emailAddress            = optional     //郵箱
  • 申請信息的三種策略:匹配、支持和可選

    • 匹配:申請填寫的信息跟CA設置信息必須一致
    • 支持:必須填寫這項申請信息
    • 可選:可有可無
  • 第1步,創建私有CA,生成私鑰

    // 創建所需要的文件
    touch /etc/pki/CA/index.txt      //生成證書索引數據庫文件
    echo 01 > /etc/pki/CA/serial     //指定第一個頒發證書的序列號
    
    // CA生成私鑰,注意名稱必須為cakey.pem
    (umask066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
    
  • 第2步,生成自簽名證書

    openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
    // -new 生成新證書簽署請求
    // -x509 專用于CA生成自簽證書
    // -key 生成請求時用到的私鑰文件
    // -days n 證書的有效期限
    // -out /PATH/TO/SOMECERTFILE: 證書的保存路徑
    
  • 第3步,頒發證書,一般將私鑰和CA簽發的證書保存在應用的目錄中

    // 1. 生成證書請求csr
    // 生成私鑰
    (umask066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)
    生成證書申請文件
    openssl req -new -key /etc/pki/tls/private/test.key -out etc/pki/tls/test.csr
    
    // 2. 將證書請求文件傳輸給CA
    
    // 3. CA簽署證書,并將證書頒發給請求者
    openssl ca -in /tmp/test.csr -out /etc/pki/CA/certs/test.crt -days 365
    注意:默認國家,省,公司名稱三項必須和CA一致
    
    // 4. 查看證書中的信息:
    openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates
    // 查看指定編號的證書狀態
    openssl ca -status SERIAL
    
  • 第4步,吊銷證書

    // 1. 在客戶端獲取要吊銷的證書的serial
    openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
    
    // 2. 在CA上,根據客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致,吊銷證書
    openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
    // 指定第一個吊銷證書的編號
    注意:第一次更新證書吊銷列表前,才需要執行
    echo 01 > /etc/pki/CA/crlnumber
    
    // 3. 更新證書吊銷列表
    openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem
    // 查看crl文件:
    openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text
    
  • 實驗:建立根CA,子CA,并實現根CA簽發自身證書、根CA給子CA簽發證書、子CA給申請者簽發證書,最后吊銷子CA簽發給申請者的證書,并生成證書吊銷列表
    環境設置
    根CA的ip地址:192.168.136.230,命令提示符顏色:紫色
    子CA的ip地址:192.168.136.229,命令提示符顏色:黃色
    申請主機的ip地址:192.168.136.224,命令提示符顏色:藍色
    密鑰、證書申請、簽發的證書存儲位置,如下圖:

第1步:建立根CA,根CA簽發自身證書(根CA上操作)
建立證書索引庫文件index.txt,指定證書序列號
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial

生成私鑰文件cakey.pem,存儲在/etc/pki/CA/private目錄下
(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 2048)

自已簽發自己的證書cacert.pem,存儲在/etc/pki/CA目錄下,過程中設置:countryName, stateOrProvinceName, organizationName, organizationalUnitName, commonName, emailAddress等信息,前三項一定要注意,之后簽發的證書信息務必要與本次設置的信息相同
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 7300

第2步,建立子CA,子CA向根CA申請證書,根CA簽發證書(子CA上操作)
建立證書索引庫文件index.txt,指定證書序列號
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial

生成私鑰
(umak 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 2048)

生成證書申請文件
openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.csr

將證書申請文件傳送給根CA,根CA簽發證書并將證書傳送回子CA,存儲至子CA的/etc/pki/CA目錄下
scp /etc/pki/CA/cacert.csr 192.168.136.230:/tmp 發送證書申請文件至根CA

openssl ca -in /tmp/cacert.csr -out /etc/pki/CA/certs/cacert.pem -days 3650
根CA簽發證書(此命令在根CA上操作)

查看簽發的證書內容,可以看到證書序列號按照/etc/pki/CA/serial文件中的01編號,根CA和子CA的關鍵信息相同(此命令在根CA上操作)

使用openssl x509 -in /etc/pki/CA/certs/cacert.pem -noout -text|issuer|suject|serial|dates命令查看證書信息,紅框中可以看到時間期限確實為簽發證書指定的約10年(-days 3650)(此命令在根CA上操作)

使用openssl ca -status 01命令,查看指定編號的證書狀態(此命令在根CA上操作)

scp /etc/pki/CA/certs/cacert.pem 192.168.136.229:/etc/pki/CA/
發送簽發的證書至子CA(此命令在根CA上操作)

第3步,申請主機向子CA發起證書簽發申請,子CA簽發證書(申請主機上操作)
生成密鑰
(umask 066; openssl genrsa -out /etc/pki/tls/private/hello.key -des3 2048)

生成證書申請文件
openssl req -new -key /etc/pki/tls/private/hello.key -out /etc/pki/tls/hello.csr

將證書申請文件傳送給子CA,子CA簽發證書并將證書傳送回申請主機,存儲至申請主機的/etc/pki/tls目錄下
scp /etc/pki/tls/hello.csr 192.168.136.229:/tmp 發送證書申請文件至子CA

openssl ca -in /tmp/hello.csr -out /etc/pki/CA/certs/hello.crt -days 730
子CA簽發證書(此命令在子CA上操作)

scp /etc/pki/CA/certs/hello.crt 192.168.136.224:/etc/pki/tls/
發送簽發的證書至子CA(此命令在子CA上操作)

將根CA證書、子CA證書、申請主機證書都傳至windows,可以在證書頁面看到清晰的證書繼承關系

第4步,吊銷子CA給申請主機的證書,創建證書吊銷列表(子CA上操作)
環境設置:在子CA上再簽發兩個證書
修改/etc/pki/CA/index.txt.attr文件,內容改為"unique_subject = no",這樣可以為相同證書申請簽發多次證書
openssl ca -in /tmp/hello.csr -out /etc/pki/CA/certs/hello1.crt -days 300
openssl ca -in /tmp/hello.csr -out /etc/pki/CA/certs/hello2.crt -days 500

查看想要吊銷證書的序列號,查看目前所有證書的狀態,V表示可用狀態
openssl x509 -in /etc/pki/CA/certs/hello1.crt -noout -serial -subject
openssl x509 -in /etc/pki/CA/certs/hello2.crt -noout -serial -subject
cat /etc/pki/CA/index.txt
``

吊銷序列號為02和03的兩個證書:
openssl ca -revoke /etc/pki/CA/newcerts/02.pem
openssl ca -revoke /etc/pki/CA/newcerts/03.pem
cat /etc/pki/CA/index.txt 查看索引數據庫,發現被吊銷的證書狀態為R

生成證書吊銷列表
echo 01 > /etc/pki/CA/crlnumber 指定首個證書吊銷列表的序列號
openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem 生成證書吊銷列表

查看證書吊銷列表內容
openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text

三、OpenSSH

(一)SSH協議

  • ssh: secure shell,TCP連接,默認端口號22,安全的端口登錄
  • 軟件實現:OpenSSH, dropbear
  • 協議版本:當前使用ssh v2,基于DH算法做密鑰交換,基于RSA或DSA實現身份認證
  • 登錄認證方式:基于password和基于key兩種方式

(二)OpenSSH

  • 基于C/S結構

    • client: ssh, scp, xshell, securecrt
    • server: sshd
  • ssh客戶端:

    • 路徑:/etc/ssh/ssh_config
    • 配置項:
      StrictHostKeyChecking 首次登錄檢查Key,默認為"ask"提示,設為"no"不提示
    • 語法:
      ssh [user@]host [COMMAND] 默認以當前本機登錄用戶名登錄遠程主機
      ssh [-l user] host [COMMAND] -l 指定用戶登錄遠程主機
    選項:
    -p port:遠程服務器監聽的端口
    -b:指定連接的源IP
    -v:調試模式
    -C:壓縮方式
    -X:支持x11轉發
    -Y:支持信任x11轉發
    -t:強制偽tty分配
    //通過ssh直連remoteserver1實現間接連接至remoteserver2
    ssh -t remoteserver1 ssh remoteserver2
    

(三)OpenSSH遠程驗證

  • openssh實現遠程主機驗證的方式:
    當用戶遠程連接ssh服務器時,會復制ssh服務器/etc/ssh/ssh_host*key.pub文件中的公鑰到客戶機的~./ssh/know_hosts中。下次連接時,會自動匹配相應私鑰,不能匹配,將拒絕連接

  • ssh服務登錄驗證:基于用戶/口令和基于密鑰兩種方式

    • 基于用戶/口令登錄

      • step 1 客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶
      • step 2 用戶會根據服務器發來的公鑰對密碼進行加密
      • step 3 加密后的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則用戶登錄成功
    • 基于密鑰登錄

      • step 1 首先在客戶端生成一對密鑰
      • step 2 并將客戶端的公鑰拷貝到服務端
      • step 3 當客戶端再次發送一個連接請求,包括ip, 用戶名
      • step 4 服務端得到客戶端的請求后,會到authorized_keys中查找,如果有響應的IP和用戶,就會隨機生成一個字符串,例如:acdf
      • step 5 服務端使用客戶端拷貝過來的公鑰進行加密,然后發送給客戶端
      • step 6 得到服務端發來的消息后,客戶端會使用私鑰進行解密,然后將解密后的字符串發送給服務端
      • step 7 服務端接受到客戶端發來的字符串后,跟之前的字符串進行對比,如果一致,就允許免密碼登錄
    • 實現基于密鑰登錄

      • 在客戶端生成密鑰對,-P '':私鑰不設置密碼
        ssh-keygen -t rsa [-P ''] [-f "~/.ssh/id_rsa"]
      • 把公鑰文件傳輸至遠程服務器對應用戶的家目錄
        ssh-copy-id [-i [identity_file]] [user@]host
      • 修改私鑰的密碼
        ssh-keygen -p
      • 使用驗證代理,只需要輸入一次密碼,之后所有的ssh連接輸入私鑰密碼的工作由代理完成。bash進程結束,代理工作結束;下次登錄時,重新啟動代理。
        ssh-agent agent 啟用代理
        ssh-add 密碼添加給代理

(四)加密文件傳輸工具:scp, rsysc, sftp, pssh

(1)scp工具
  • 來源于openssh-clients軟件包

  • scp遇到相同文件直接覆蓋操作

  • 語法:
    scp [options] SRC... DEST/
    scp [options] [user@]host:/sourcefile /destpath:將遠程主機文件復制到本地
    scp [options] /sourcefile [user@]host:/destpath:將本地文件復制到遠程主機

  • 常用選項:
    -C: 壓縮數據流
    -r: 遞歸復制
    -p: 保持原文件的屬性信息
    -q: 靜默模式
    -P PORT: 指明remote host的監聽端口

(2)rsync工具
  • 基于ssh和rsh服務實現高效率的遠程系統之間復制文件

  • 使用安全的shell連接做為傳輸方式

  • 比scp更快,只復制不同的文件

  • 語法:
    rsync -av /etc server1:/tmp:復制目錄和目錄下文件
    rsync -av /etc/ server1:/tmp:只復制目錄下文件

  • 選項:
    -n 模擬復制過程
    -v 顯示詳細過程
    -r 遞歸復制目錄樹
    -p 保留權限
    -t 保留時間戳
    -g 保留組信息
    -o 保留所有者信息
    -l 將軟鏈接文件本身進行復制(默認)
    -L 將軟鏈接文件指向的文件復制
    -a 存檔,相當于–rlptgoD,但不保留ACL(-A) 和SELinux屬性(-X)

(3)sftp工具
  • 交互式文件傳輸工具
  • 用法和傳統的ftp工具相似
  • 利用ssh服務實現安全的文件上傳和下載
  • 使用ls cd mkdir rmdir pwd get put等指令,可用?help獲取幫助信息
(4)pssh工具
  • pssh是一個python編寫可以在多臺服務器上執行命令的工具,也可實現文件復制

  • 選項如下:
    --version:查看版本
    -h:主機文件列表,內容格式"[user@]host[:port]"
    -H:主機字符串,內容格式"[user@]host[:port]"
    -l:登錄使用的用戶名
    -o:輸出的文件目錄
    -O:SSH的選項
    -v:詳細模式
    -A:手動輸入密碼模式
    -x:額外的命令行參數使用空白符號,引號,反斜線處理
    -X:額外的命令行參數,單個參數模式,同-x
    -i:每個服務器內部處理信息輸出
    -P:打印出服務器返回信息

(五)SSH端口轉發(又名“隧道”):

(1)SSH 端口轉發的功能
  • SSH端口轉發:SSH將其他TCP 端口的網絡數據通過SSH 鏈接來轉發,并且自動提供了相應的加密及解密服務
  • SSH端口轉發又名隧道(tunneling),SSH為其他TCP協議提供了一個安全的傳輸通道。
  • 功能:
    • 加密SSH Client 端至SSH Server 端之間的通訊數據
    • 突破防火墻的限制完成一些之前無法建立的TCP 連接
(2)SSH本地轉發
  • 語法:
    ssh -L local_port:remote_host:remote_host_port ssh_server
    local_port:本地端口(防火墻外)
    remote_host:遠程主機IP(防火墻內)
    remote_host_port:遠程主機不安全的TCP協議端口(防火墻內)
    ssh_server:充當跳板機的ssh服務器IP(防火墻內)

  • 選項:
    -f 后臺啟用
    -N 不打開遠程shell,處于等待狀態
    -g 啟用網關功能

  • 網絡連接狀態如圖所示:

  • 示例:

    • ssh -L 2009:telnetsrv:23 -Nf sshsrv
      建立從本機到telnet服務器23端口的連接,監聽本機2009端口,以sshsrv服務器為跳板
    • telnet 127.0.0.1 2009
      當訪問本機的2009的端口時,被加密后轉發到sshsrv的ssh服務,再解密被轉發至telnetsrv的23端口
    • 信息在端口間的流向:
      data <<==>> local_host:2009 <<==>> local_host:XXXXX <<==>> ssh_srv:22 <<==>> ssh_srv:YYYYY <<==>> telnet_srv:23
  • 實驗:建立SSH本地轉發
    建立從本機192.168.136.230到telnet服務器192.168.136.224的連接,中間將ssh服務器192.168.136.229作為跳板,本地轉發端口2009
    ssh -L 2009:192.168.136.224:23 -Nf 192.168.136.229 本地建立連接
    telnet 127.0.0.1 2009 本地轉發連接遠程telnet服務器

    本地主機端口連接情況:本機連接至跳板機的ssh服務22端口

    跳板機端口連接情況:跳板機一方面與本機以ssh服務22端口連接,一方面與遠程服務器以telnet服務23端口連接

    遠程telnet服務器端口連接情況:跳板機連接至遠程服務器的telnet服務23端口

    數據流向為:data <<==>> 127.0.0.1:2009 <<==>> 192.168.136.230:56160 <<==>> 192.168.136.229:22 <<==>> 192.168.136.229:51488 <<==>> 192.168.136.224:23

(3)SSH遠程轉發
  • 語法:
    ssh -R ssh_server_port:remote_host:remote_host_port ssh_server
    ssh_server_port:(防火墻外)
    remote_host_port:(防火墻內)
    remote_host_port:(防火墻內)
    ssh_server:(防火墻外)

  • 網絡連接狀態如圖所示:

  • 示例:

    • ssh -R 2010:telnetsrv:23 -Nf sshsrv
      建立從ssh服務器到telnet服務器23端口的連接,監聽ssh服務器2010端口,以ssh客戶端為跳板

    • telnet sshsrv 2010
      當訪問本機的2010端口時,將加密信息通過ssh服務轉發請求到本機ssh客戶端,再由本機解密后轉發到telnetsrv的23端口

    • 信息在端口間的流向:
      Data <==> ssh_srv:2010 <==> ssh_srv:22 <==> local_host:XXXXX <==> local_host:YYYYY <==> telnet_srv:23

  • 實驗:建立SSH遠程轉發
    建立從ssh服務器192.168.136.230到telnet服務器192.167.136.224的連接,中間將本機192.168.136.229作為跳板,遠程轉發端口2010
    ssh -R 2010:192.168.136.224:23 -Nf 192.168.136.230 本機建立連接

    telnet 127.0.0.1 2010 遠程ssh服務器連接遠程telnet服務器

    ssh服務器端口連接情況:ssh服務器的22端口與主機相連

    主機端口連接情況:一方面作為客戶機與防火墻外的ssh服務器連接,另一方面與防火墻內的telnet服務器的23端口連接

    telnet服務器端口連接情況:telnet服務器的23端口與主機相連

(4)SSH端口轉發
  • 當用瀏覽器訪問internet時,本機的1080端口做為代理服務器,瀏覽器的訪問請求被轉發到ssh_server上,由ssh_server替之訪問internet

  • 示例:

    • ssh -D 1080 root@sshserver
      建立本地1080端口至ssh_server的ssh連接

    • 在瀏覽器設置代理本地代理:ip:127.0.0.1 port:1080

  • 實驗:建立SSH端口轉發
    通過本機(192.168.136.224)1080端口轉發請求至192.168.136.230的ssh服務器,由ssh服務器訪問192.168.136.229的httpd服務

(六)SSH的X協議轉發:

  • X協議:C/S結構,Client程序向Server發出請求,Server響應請求并展現相關圖形界面
  • 所有的圖形應用程序都是X客戶程序
    • 能夠通過TCP/IP連接遠程X服務器
    • 數據沒有加密機制,可以通過ssh連接隧道安全傳輸
  • OpenSSH的實現:
    ssh -X user@remotehost COMMAND
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內容