常見的PKI標(biāo)準(zhǔn)(X.509辑甜、PKCS)及證書相關(guān)介紹

目錄

  • ASN.1 - 數(shù)據(jù)結(jié)構(gòu)描述語言
  • 文件編碼格式
    • DER編碼格式
    • PEM編碼格式
  • 證書哈肖、密碼學(xué)Key格式標(biāo)準(zhǔn)
    • X.509標(biāo)準(zhǔn)
    • PKCS(公鑰加密標(biāo)準(zhǔn))系列(PKCS#1受啥、PKCS#8窿侈、PKCS#12)
  • 常見的證書標(biāo)準(zhǔn)格式(PEM編碼)
    • X.509 Certificate
    • X.509 Certificate Subject Public Key Info
    • PKCS #1 Private Key
    • PKCS #1 Public Key
    • PKCS #8 Unencrypted Private Key
    • PKCS #8 Encrypted Private Key
  • 常見的證書文件后綴(.pem .der .cer .crt .pfx .p12 .jks)
  • Private Key操作命令:生成炼幔、轉(zhuǎn)換
  • Public Key操作命令:從PKCS #1/#8提取、從X.509證書提取史简、轉(zhuǎn)換

# 前言

PKI標(biāo)準(zhǔn)可以分為第一代標(biāo)準(zhǔn)和第二代標(biāo)準(zhǔn)乃秀。
第一代PKI標(biāo)準(zhǔn)主要包括美國RSA公司的公鑰加密標(biāo)準(zhǔn)(Public Key Cryptography Standards,PKCS)系列圆兵、國際電信聯(lián)盟的ITU-T X.509跺讯、IETF組織的公鑰基礎(chǔ)設(shè)施X.509(Public Key Infrastructure X.509,PKIX)標(biāo)準(zhǔn)系列殉农、無線應(yīng)用協(xié)議(Wireless Application Protocol ,WAP)論壇的無線公鑰基礎(chǔ)設(shè)施(Wireless Public Key Infrastructure刀脏,WPKI)標(biāo)準(zhǔn)等。第一代PKI標(biāo)準(zhǔn)主要是基于抽象語法符號(Abstract Syntax Notation One超凳,ASN.1)編碼的愈污,實現(xiàn)比較困難,這也在一定程度上影響了標(biāo)準(zhǔn)的推廣轮傍。
第二代PKI標(biāo)準(zhǔn)暂雹,略。
CA中心普遍采用的規(guī)范是X.509系列和PKCS系列金麸。

# ASN.1 - 數(shù)據(jù)結(jié)構(gòu)描述語言

引用自Wiki

ASN.1 is a standard interface description language for defining data structures that can be serialized and deserialized in a cross-platform way.

也就是說ASN.1是一種用來定義數(shù)據(jù)結(jié)構(gòu)的接口描述語言擎析,它不是二進(jìn)制,也不是文件格式挥下,看下面的例子你就會明白了:

FooQuestion ::= SEQUENCE {
    trackingNumber INTEGER,
    question       IA5String
}

這段代碼定義了FooQuestion的數(shù)據(jù)結(jié)構(gòu)揍魂,下面是FooQuestion這個數(shù)據(jù)接口的某個具體的數(shù)據(jù):

myQuestion FooQuestion ::= SEQUENCE {
    trackingNumber     5,
    question           "Anybody there?"
}

ASN.1用在很多地方比如下面要講的X.509PKCS group of cryptography standards

# 文件編碼格式

## DER編碼格式

引用自Wiki

ASN.1 is closely associated with a set of encoding rules that specify how to represent a data structure as a series of bytes

意思是ASN.1有一套關(guān)聯(lián)的編碼規(guī)則棚瘟,這些編碼規(guī)則用來規(guī)定如何用二進(jìn)制來表示數(shù)據(jù)結(jié)構(gòu)现斋,DER是其中一種。

把上面的FooQuestion的例子用DER編碼則是(16進(jìn)制):

30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f

翻譯過來就是:

30 — type tag indicating SEQUENCE
13 — length in octets of value that follows
  02 — type tag indicating INTEGER
  01 — length in octets of value that follows
    05 — value (5)
  16 — type tag indicating IA5String 
     (IA5 means the full 7-bit ISO 646 set, including variants, 
      but is generally US-ASCII)
  0e — length in octets of value that follows
    41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f — value ("Anybody there?")

看到這里你應(yīng)該對DER編碼格式有一個比較好的認(rèn)識了偎蘸。

## PEM編碼格式

引用自Wiki

Privacy-Enhanced Mail (PEM) is a de facto file format for storing and sending cryptographic keys, certificates, and other data, based on a set of 1993 IETF standards defining "privacy-enhanced mail."

PEM是一個用來存儲和發(fā)送密碼學(xué)key庄蹋、證書和其他數(shù)據(jù)的文件格式的事實標(biāo)準(zhǔn)瞬内。許多使用ASN.1的密碼學(xué)標(biāo)準(zhǔn)(比如X.509PKCS)都使用DER編碼,而DER編碼的內(nèi)容是二進(jìn)制的限书,不適合與郵件傳輸(早期Email不能發(fā)送附件)虫蝶,因此使用PEM把二進(jìn)制內(nèi)容轉(zhuǎn)換成ASCII碼。文件內(nèi)容的格式像下面這樣:

-----BEGIN label-----
BASE64Encoded
-----END label-----

label用來區(qū)分內(nèi)容到底是什么類型倦西,下面會講能真。

和PEM相關(guān)的RFC有很多,與本文內(nèi)容相關(guān)的則是RFC7468扰柠,這里面規(guī)定了很多l(xiāng)abel粉铐,不過要注意不是所有l(wèi)abel都會有對應(yīng)的RFC或Specification,這些label只是一種約定俗成卤档。

PEM實際上就是把DER編碼的文件的二進(jìn)制內(nèi)容用base64編碼一下蝙泼,然后加上-----BEGIN label-----這樣的頭和-----END label-----這樣的尾,中間則是DER文件的Base64編碼劝枣。

我們可以通過下面的方法驗證這個結(jié)論汤踏,先生成一個RSA Private Key,編碼格式是PEM格式:

openssl genrsa -out key.pem

查看一下文件內(nèi)容哨免,可以看到label是RSA PRIVATE KEY

-----BEGIN RSA PRIVATE KEY-----
BASE64Encoded
-----END RSA PRIVATE KEY-----

然后我們把PEM格式轉(zhuǎn)換成DER格式:

openssl rsa -in key.pem -outform der -out key.der

如果你這個時候看一下文件內(nèi)容會發(fā)現(xiàn)都是二進(jìn)制茎活。然后我們把DER文件的內(nèi)容Base64一下,會看到內(nèi)容和PEM文件一樣(忽略頭尾和換行):

base64 -i key.der -o key.der.base64

在-----BEGIN-----與-----END-----之間內(nèi)容的頂部琢唾,有時使用一些頭定義對信息進(jìn)行封裝载荔,這些頭信息格式如下(不一定都需要,可選的):
Proc-Type,4:ENCRYPTED
DEK-Info: cipher-name, ivec
其中采桃,第一個頭信息標(biāo)注了該文件是否進(jìn)行了加密懒熙,該頭信息可能的值包括ENCRYPTED(信息已經(jīng)加密和簽名)、MIC-ONLY(信息經(jīng)過數(shù)字簽名但沒有加密)普办、MIC-CLEAR(信息經(jīng)過數(shù)字簽名但是沒有加密工扎、也沒有進(jìn)行編碼,可使用非PEM格式閱讀)以及CLEAR(信息沒有簽名和加密并且沒有進(jìn)行編碼衔蹲,該項好象是openssl自身的擴(kuò)展肢娘,但是并沒有真正實現(xiàn));
第二個頭信息標(biāo)注了加密的算法以及使用的ivec參量舆驶,ivec其實在這兒提供的應(yīng)該是一個隨機(jī)產(chǎn)生的數(shù)據(jù)序列橱健,與塊加密算法中要使用到的初始化變量(IV)不一樣。

# 證書沙廉、密碼學(xué)Key格式標(biāo)準(zhǔn)

上面講到的PEM是對證書拘荡、密碼學(xué)Key文件的一種編碼方式,下面舉例這些證書撬陵、密碼學(xué)Key文件格式:

## X.509標(biāo)準(zhǔn)

引用自Wiki

In cryptography, X.509 is a standard defining the format of public key certificates. X.509 certificates are used in many Internet protocols, including TLS/SSL, which is the basis for HTTPS, the secure protocol for browsing the web.

X.509是一個Public Key Certificates的格式標(biāo)準(zhǔn)珊皿,TLS/SSL使用它网缝,TLS/SSL是HTTPS的基礎(chǔ)所以HTTPS也使用它。而所謂Public Key Certificates又被稱為Digital CertificateIdentity Certificate蟋定。

An X.509 certificate contains a public key and an identity (a hostname, or an organization, or an individual), and is either signed by a certificate authority or self-signed.

一個X.509 Certificate包含一個Public Key和一個身份信息粉臊,它要么是被CA簽發(fā)的要么是自簽發(fā)的。

下面這種張圖就是一個X.509 Certificate:

事實上X.509 Certificate這個名詞通常指代的是IETF的PKIX Certificate和CRL Profile溢吻,見RFC5280维费。所以當(dāng)你看到PKIX Certificate字樣的時候可以認(rèn)為就是X.509 Certificate。

## PKCS(公鑰加密標(biāo)準(zhǔn))系列

引用自Wiki

In cryptography, PKCS stands for "Public Key Cryptography Standards"

前面提到的X.509是定義Public Key Certificates的格式的標(biāo)準(zhǔn)促王,看上去和PKCS有點像,但實際上不同而晒,PKCS是Public Key密碼學(xué)標(biāo)準(zhǔn)蝇狼。此外Public-Key Cryptography雖然名字看上去只涉及Public Key,實際上也涉及Priviate Key倡怎,因此PKCS也涉及Private Key迅耘。

PKCS一共有15個標(biāo)準(zhǔn)編號從1到15,這里只挑講PKCS #1监署、PKCS #8颤专、PKCS #12。

### PKCS #1

PKCS #1钠乏,RSA Cryptography Standard栖秕,定義了RSA Public Key和Private Key數(shù)學(xué)屬性和格式,詳見RFC8017晓避。

詳細(xì)的介紹了RSA算法的計算過程簇捍,包括:key的產(chǎn)生,key的結(jié)構(gòu)俏拱,對數(shù)字加密/解密/簽名/驗證簽名的過程暑塑、對應(yīng)算法。

  1. key. 關(guān)于key锅必,分別記錄了private和public的詳細(xì)結(jié)構(gòu)事格,以及存儲哪些內(nèi)容。并且在附錄里面推薦了ASN.1 Syntax中的存儲結(jié)構(gòu)搞隐。注:沒有規(guī)定實際的物理文件存儲結(jié)構(gòu)驹愚,比如pem等。
  2. 加密/解密 詳細(xì)描述了加密/解密的算法尔许。包括么鹤,首先針對字符串,怎么轉(zhuǎn)化成數(shù)字味廊,之后蒸甜,怎么根據(jù)數(shù)字進(jìn)行加密棠耕。 這里可以看出,標(biāo)準(zhǔn)中沒有對超長字符串處理的說明柠新。而轉(zhuǎn)化出的字符串的長度窍荧,全都是key的模長度k。
    在字符串轉(zhuǎn)化成數(shù)字過程中恨憎,需要增加填充字符蕊退,所以,分成了兩種不同算法:RSAES-OAEP(現(xiàn)有標(biāo)準(zhǔn)) RSAES-PKCS1-v1_5(兼容過去標(biāo)準(zhǔn))憔恳。在實際加密過程中瓤荔,就只有一種算法了
  3. 無論在加密還是簽名過程中,都會進(jìn)行hash操作钥组,hash操作沒有自己定義输硝,而是從附錄中可以選擇需要的hash方式。
  4. PKCS1填充方式:在進(jìn)行RSA運算時需要將源數(shù)據(jù)D轉(zhuǎn)化為Encryption block(EB)程梦。其中pkcs1padding V1.5的填充模式按照以下方式進(jìn)行:
格式:加密塊EB = 00 + 塊類型BT + 填充字符PS + 00 + 數(shù)據(jù)D  //以下描述均以十六進(jìn)制字符串來描述
    說明
      EB:為轉(zhuǎn)化后Hex進(jìn)制表示的數(shù)據(jù)塊点把,長度為128個字節(jié)(密鑰1024位的情況下)
      00:為了確保塊轉(zhuǎn)換為整數(shù)的時候 小于模數(shù) 
      BT(Block Type):
          用一個字節(jié)表示,在目前的版本上屿附,有三個值00 01 02郎逃。如果使用公鑰操作,BT永遠(yuǎn)為02挺份,如果用私鑰操作則可能為00或01褒翰。
          塊類型為00,數(shù)據(jù)開頭必須不能是00压恒,因為填充的也是00影暴,將無法解析。
          塊類型為01或02探赫,塊可以被準(zhǔn)確解析型宙,因為不會是00來填充。
          如果是私鑰操作伦吠,且明文數(shù)據(jù)是以00字節(jié)開頭妆兑,那么建議把BT的值設(shè)置為01,否則毛仪,BT為00搁嗓,PS為00,D開頭為00箱靴,數(shù)據(jù)無法被分隔開
      PS(Padding String):
          為填充位腺逛,PS由k-3-D這么多個字節(jié)構(gòu)成,k表示密鑰的字節(jié)長度衡怀,如果我們用1024bit的RSA密鑰棍矛,這個長度就是1024/8=128安疗,D表示明文數(shù)據(jù)D的字節(jié)長度
          對于BT為00的,則這些字節(jié)全部為00
          對于BT為01的够委,這些值全部為FF
          對于BT為02的荐类,這些字節(jié)的值隨機(jī)產(chǎn)生但不能是0字節(jié)(非00)
          填充長度至少為8個字節(jié)
      00:用于分開 PS 和 D
      D:數(shù)據(jù)原文(HEX十六進(jìn)制)
          PS至少為8個字節(jié),所以D <= k-11
          當(dāng)我們使用128字節(jié)密鑰對數(shù)據(jù)進(jìn)行加密時茁帽,明文數(shù)據(jù)的長度不能超過過128-11=117字節(jié)
          當(dāng)RSA要加密數(shù)據(jù)大于 k-11字節(jié)時怎么辦呢玉罐?把明文數(shù)據(jù)按照D的最大長度分塊然后逐塊加密,最后把密文拼起來就行。
注意:加密塊EB長度 = RSA密鑰key的長度潘拨。比如密鑰1024bit吊输,即128字節(jié),加密塊也會被填充為128字節(jié)
示例:下面的數(shù)據(jù)需要填充74個FF才夠128個字節(jié)铁追。
簽名的時候:加密塊 = 00 + 01 + FF(74個) + 00 + ">3031300d060960864801650304020105000420b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9(51字節(jié))

此外還有其他標(biāo)準(zhǔn)里定義的填充方式璧亚,比如PKCS5Padding、PKCS7Padding脂信,不再贅述

### PKCS #8

PKCS #8,Private-Key Information Syntax Standard透硝,詳細(xì)的描述了私鑰的存儲格式狰闪。用于加密、非加密地存儲Private Certificate Keypairs(不限于RSA)濒生,詳見RFC5858埋泵。

### PKCS #12

PKCS #12定義了通常用來存儲Private Keys和Public Key Certificates(例如前面提到的X.509)的文件格式,使用基于密碼的對稱密鑰進(jìn)行保護(hù)罪治。注意上述Private Keys和Public Key Certificates是復(fù)數(shù)形式丽声,這意味著PKCS #12文件實際上是一個Keystore,PKCS #12文件可以被用做Java Key Store(JKS)觉义,詳見RFC7292雁社。

如果你用自己的CA所簽發(fā)了一個證書,運行下列命令可以生成PKCS #12 keystore:

openssl pkcs12 -export \
  -in <cert> \
  -inkey <private-key> \
  -name my-cert \
  -caname my-ca-root \
  -CAfile <ca-cert> \
  -chain
  -out <pkcs-file>

PKCS #12一般不導(dǎo)出PEM編碼格式晒骇。

# 常見的證書標(biāo)準(zhǔn)格式(PEM編碼)

當(dāng)你不知道你的PEM文件內(nèi)容是什么格式的可以根據(jù)下面查詢霉撵。

## X.509 Certificate

RFC7468 - Textual Encoding of Certificates

-----BEGIN CERTIFICATE-----
BASE64Encoded
-----END CERTIFICATE-----

## X.509 Certificate Subject Public Key Info

RFC7468 - Textual Encoding of Subject Public Key Info

-----BEGIN PUBLIC KEY-----
BASE64Encoded
-----END PUBLIC KEY-----

## PKCS #1 Private Key

沒有RFC或權(quán)威Specification,該格式有時候被稱為traditional format洪囤、SSLeay format(見SO

-----BEGIN RSA PRIVATE KEY-----
BASE64Encoded
-----END RSA PRIVATE KEY-----

## PKCS #1 Public Key

同上沒有RFC或權(quán)威Specification

-----BEGIN RSA PUBLIC KEY-----
BASE64Encoded
-----END RSA PUBLIC KEY-----

## PKCS #8 Unencrypted Private Key

RFC7468 - One Asymmetric Key and the Textual Encoding of PKCS #8 Private Key Info

-----BEGIN PRIVATE KEY-----
BASE64Encoded
-----END PRIVATE KEY-----

## PKCS #8 Encrypted Private Key

RFC7468 - Textual Encoding of PKCS #8 Encrypted Private Key Info

-----BEGIN ENCRYPTED PRIVATE KEY-----
BASE64Encoded
-----END ENCRYPTED PRIVATE KEY-----

# 常見證書后綴

作為文件形式存在的證書一般有這幾種后綴:(證書中包含公鑰徒坡,以及公鑰頒發(fā)機(jī)構(gòu)、版本號瘤缩、算法等信息喇完,可以以X.509為例看一下證書內(nèi)容)

1.帶有私鑰的證書:(一般都有密碼保護(hù),使用的是DER編碼)

  • .pfx 常用于Windows上的 IIS服務(wù)器
  • .p12 常用于MAC OS剥啤、iOS中(PKCS#12由PFX進(jìn)化而來的用于交換公共的和私有的對象的標(biāo)準(zhǔn)格式)
  • .jks Java Key Storage锦溪,這是Java的專利不脯,JAVA的專屬格式,一般用于 Tomcat 服務(wù)器海洼。

2.不帶私鑰的證書:

  • .cer/crt 編碼方式不一定跨新,可能是DER也可能是PEM
  • .pem 都是PEM編碼格式
  • .der 都是DER編碼格式
  • .p7b 以樹狀展示證書鏈(certificate chain),同時也支持單個證書坏逢,不含私鑰

3.補(bǔ)充

  • .der文件一般只放證書域帐,不含私鑰
  • .pem文件中可以放證書或者私鑰,或者兩者都有是整,pem如果只含私鑰的話肖揣,一般用.key擴(kuò)展名,而且可以有密碼保護(hù)
  • .csr - Certificate Signing Request浮入,即證書簽名請求龙优,這個并不是證書,而是向權(quán)威證書頒發(fā)機(jī)構(gòu)獲得簽名證書的申請事秀,其核心內(nèi)容是一個公鑰(當(dāng)然還附帶了一些別的信息)彤断,在生成這個申請的時候,同時也會生成一個私鑰key易迹,私鑰要自己保管好宰衙。做過iOS APP的朋友都應(yīng)該知道是怎么向蘋果申請開發(fā)者證書的吧.

可以使用命令行工具、代碼睹欲、在線網(wǎng)站等實現(xiàn)不同后綴格式供炼、不同證書標(biāo)準(zhǔn)之間的轉(zhuǎn)換,比如這個網(wǎng)站http://www.metools.info/

# Private Key操作命令

## 生成

生成PKCS #1格式的RSA Private Key

openssl genrsa -out private-key.p1.pem 2048

## 轉(zhuǎn)換

PKCS #1 -> Unencrypted PKCS #8

openssl pkcs8 -topk8 -in private-key.p1.pem -out private-key.p8.pem -nocrypt

PKCS #1 -> Encrypted PKCS #8

openssl pkcs8 -topk8 -in private-key.p1.pem -out private-key.p8.pem

過程中會讓你輸入密碼窘疮,你至少得輸入4位袋哼,所以PKCS #8相比PKCS #1更安全。

PKCS #8 -> PKCS #1

openssl rsa -in private-key.p8.pem -out private-key.p1.pem

如果這個PKCS #8是加密的闸衫,那么你得輸入密碼涛贯。

# Public Key操作命令

## 從PKCS #1/#8提取

提取指的是從Private Key中提取Public Key,openssl rsa同時支持PKCS #1和PKCS #8的RSA Private Key楚堤,唯一的區(qū)別是如果PKCS #8是加密的疫蔓,會要求你輸入密碼。

提取X.509格式RSA Public Key

openssl rsa -in private-key.pem -pubout -out public-key.x509.pem

提取PKCS #1格式RSA Public Key

openssl rsa -in private-key.pem -out public-key.p1.pem -RSAPublicKey_out

## 從X.509證書提取

openssl x509 -in cert.pem -pubkey -noout > public-key.x509.pem

## 轉(zhuǎn)換

X.509 RSA Public Key -> PKCS #1 RSA Public Key

openssl rsa -pubin -in public-key.x509.pem -RSAPublicKey_out -out public-key.p1.pem

PKCS #1 RSA Public Key -> X.509 RSA Public Key

openssl rsa -RSAPublicKey_in -in public-key.p1.pem -pubout -out public-key.x509.pem

# 參考鏈接

  1. 很多的內(nèi)容都來自這篇博客身冬,增加了一些內(nèi)容衅胀,并按照個人習(xí)慣整理了一下
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酥筝,隨后出現(xiàn)的幾起案子滚躯,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掸掏,死亡現(xiàn)場離奇詭異茁影,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)丧凤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門募闲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愿待,你說我怎么就攤上這事浩螺。” “怎么了仍侥?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵要出,是天一觀的道長。 經(jīng)常有香客問我农渊,道長患蹂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任砸紊,我火速辦了婚禮传于,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘醉顽。我一直安慰自己格了,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布徽鼎。 她就那樣靜靜地躺著,像睡著了一般弹惦。 火紅的嫁衣襯著肌膚如雪否淤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天棠隐,我揣著相機(jī)與錄音石抡,去河邊找鬼。 笑死助泽,一個胖子當(dāng)著我的面吹牛啰扛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嗡贺,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼隐解,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诫睬?” 一聲冷哼從身側(cè)響起煞茫,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后续徽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚓曼,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年钦扭,在試婚紗的時候發(fā)現(xiàn)自己被綠了纫版。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡客情,死狀恐怖其弊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情裹匙,我是刑警寧澤瑞凑,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站概页,受9級特大地震影響籽御,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惰匙,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一技掏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧项鬼,春花似錦哑梳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至龄毡,卻和暖如春吠卷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沦零。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工祭隔, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人路操。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓疾渴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親屯仗。 傳聞我的和親對象是個殘疾皇子搞坝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容