Json File Yapısı Ve PHP İle Okumak

Json File , genellikle sunucu ve istemci arasında veri aktarmında kullanılan dosya tipidir. Veri dönüştürmek için kullanılır. Dosya uzantısı .json şeklindedir.

Json file içeresinde şu tür veri tipleri olabilir;

  • String
  • Number
  • Array
  • Object
  • Boolean
  • Null

Örnek bir json file dosyasında üzerine adım adım inceleme yapalım. Bir SSL scan aracı üzerinden aldığım ekran çıktısını adım adım inceleyecek olursak; nesneleri(object) ve dizinleri(array) yapılarını görebilir.

Json yapısı her zaman { ile başlar ve } her zaman parantezi ile biter. Oluşturulan her nesneden yada diziden sonra virgül koyulmalıdır. Json yapısı isim:değer çiftlerinden oluşur.

Aşağıda ki ekran çıktısı üzerinden bazı nesnelere bakalım.

“host”: “asimmisirli.com”,Burada host ismi asimmisirli.com değeri temsil etmektedir.. Yani siz asimmisirli.com değerini almak için host ismini kullanacaksınız. Yada diyelim ki siz ip adresini okuyup işlem yapmak istiyorsunuz. Bunun isim:değer çiftlerinden ip ismini alarak ip değerine ulaşabilirsiniz.

  "host": "asimmisirli.com",
  "ip": "93.187.201.200",
  "port": 443,
  "elapsedTime": 2331,
  "tlsVersion": "TLSv1.2",
  "cipher": "ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD",
  "tempPublicKeyAlg": "ECDH prime256v1",
  "tempPublicKeySize": 256,
  "secureRenego": true,
  "compression": "NONE",
  "expansion": "NONE",
  "sessionLifetimeHint": 7200,
 "x509ChainDepth": 2,
  "verifyCertResult": true,
  "verifyHostResult": true,
  "ocspStapled": false,
  "ocspStapled": false,
  "cipherSuite":

Json file içeresinde tlsVersions, supported ve certificateChain dizileri görülmektedir. Her dizi [ ile başlayıp ,ile biter.] Örnek diziler aşağıdaki gibidir. Buradaki dikkat edilmesi gereken tek dizi certificateChain dizisidir. Bu dizi iki nesneden oluşur. Birinci yada ikinci nesnelerin içindeki değerleri okumak için 0 yada 1 indisini seçmeniz gerekecektir. Diğer dizilerde(arrray) sadece 0 yazmanız yeterli olacaktır.

 "tlsVersions": [
    "TLSv1_1", 
    "TLSv1_2", 
    "TLSv1_3"
  ],
"certificateChain": [
  {
    "version": 3,
    "subject": "CN=asimmisirli.com",
    "issuer": "CN=asimmisirli.com",
    "subjectCN": "asimmisirli.com",
    "subjectAltName": "DNS:asimmisirli.com, DNS:notes.asimmisirli.com, DNS:www.asimmisirli.com, DNS:www.notes.asimmisirli.com",
    "signatureAlg": "sha256WithRSAEncryption",
    "notBefore": "Jan 20 21:05:41 2021 GMT",
    "notAfter": "Apr 20 21:05:41 2021 GMT",
    "expired": false,
    "serialNo": "03:17:24:51:06:C3:BA:E4:09:5C:9A:5A:70:3F:45:83:B8:26",
    "keyUsage": "Digital Signature, Key Encipherment critical",
    "extKeyUsage": "TLS Web Server Authentication, TLS Web Client Authentication",
    "publicKeyAlg": "RSA",
    "publicKeySize": 4096,
    "basicConstraints": "CA:FALSE critical",
    "subjectKeyIdentifier": "FF:D2:CF:B1:9D:2B:97:D4:F5:D4:CB:67:62:E6:68:44:3A:2F:88:46",
    "sha1Fingerprint": "A8:55:7F:B5:BA:5E:7E:62:B8:29:D6:E4:CB:5F:03:C0:DB:6F:46:67"
  },  {
    "version": 3,
    "subject": "CN=R3; O=Let's Encrypt; C=US",
    "issuer": "CN=R3; O=Let's Encrypt; C=US",
    "subjectCN": "R3",
    "signatureAlg": "sha256WithRSAEncryption",
    "notBefore": "Oct  7 19:21:40 2020 GMT",
    "notAfter": "Sep 29 19:21:40 2021 GMT",
    "expired": false,
    "serialNo": "40:01:75:04:83:14:A4:C8:21:8C:84:A9:0C:16:CD:DF",
    "keyUsage": "Digital Signature, Certificate Sign, CRL Sign critical",
    "extKeyUsage": "TLS Web Server Authentication, TLS Web Client Authentication",
    "publicKeyAlg": "RSA",
    "publicKeySize": 2048,
    "basicConstraints": "CA:TRUE, pathlen:0 critical",
    "subjectKeyIdentifier": "14:2E:B3:17:B7:58:56:CB:AE:50:09:40:E6:1F:AF:9D:8B:14:C2:C6",
    "sha1Fingerprint": "48:50:4E:97:4C:0D:AC:5B:5C:D4:76:C8:20:22:74:B2:4C:8C:71:72"
  } 
]

supported": [
      "AES-128-GCM",
      "AES-256-GCM",
      "CHACHA20-POLY1305",
      "ECDHE-RSA-AES256-GCM-SHA384",
      "ECDHE-RSA-AES256-SHA",
      "AES256-GCM-SHA384",
      "AES256-SHA",
      "ECDHE-RSA-AES128-GCM-SHA256",
      "ECDHE-RSA-AES128-SHA",
      "AES128-GCM-SHA256",
      "AES128-SHA",
      "DES-CBC3-SHA"
    ]

Aşağıdaki cipherSuite nesnesi içeresinde supported dizi bulunmaktadır.

"cipherSuite": {
    "supported": [
      "AES-128-GCM",
      "AES-256-GCM",
      "CHACHA20-POLY1305",
      "ECDHE-RSA-AES256-GCM-SHA384",
      "ECDHE-RSA-AES256-SHA",
      "AES256-GCM-SHA384",
      "AES256-SHA",
      "ECDHE-RSA-AES128-GCM-SHA256",
      "ECDHE-RSA-AES128-SHA",
      "AES128-GCM-SHA256",
      "AES128-SHA",
      "DES-CBC3-SHA"
    ]
  },

Ekran çıktısının tamamı şu şekildedir.

{
  "host": "asimmisirli.com",
  "ip": "93.187.201.200",
  "port": 443,
  "elapsedTime": 2331,
  "tlsVersion": "TLSv1.2",
  "cipher": "ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD",
  "tempPublicKeyAlg": "ECDH prime256v1",
  "tempPublicKeySize": 256,
  "secureRenego": true,
  "compression": "NONE",
  "expansion": "NONE",
  "sessionLifetimeHint": 7200,
  "tlsVersions": [
    "TLSv1_1", 
    "TLSv1_2", 
    "TLSv1_3"
  ],
  "cipherSuite": {
    "supported": [
      "AES-128-GCM",
      "AES-256-GCM",
      "CHACHA20-POLY1305",
      "ECDHE-RSA-AES256-GCM-SHA384",
      "ECDHE-RSA-AES256-SHA",
      "AES256-GCM-SHA384",
      "AES256-SHA",
      "ECDHE-RSA-AES128-GCM-SHA256",
      "ECDHE-RSA-AES128-SHA",
      "AES128-GCM-SHA256",
      "AES128-SHA",
      "DES-CBC3-SHA"
    ]
  },
  "x509ChainDepth": 2,
  "verifyCertResult": true,
  "verifyHostResult": true,
  "ocspStapled": false,
  "ocspStapled": false,
  "certificateChain": [
  {
    "version": 3,
    "subject": "CN=asimmisirli.com",
    "issuer": "CN=asimmisirli.com",
    "subjectCN": "asimmisirli.com",
    "subjectAltName": "DNS:asimmisirli.com, DNS:notes.asimmisirli.com, DNS:www.asimmisirli.com, DNS:www.notes.asimmisirli.com",
    "signatureAlg": "sha256WithRSAEncryption",
    "notBefore": "Jan 20 21:05:41 2021 GMT",
    "notAfter": "Apr 20 21:05:41 2021 GMT",
    "expired": false,
    "serialNo": "03:17:24:51:06:C3:BA:E4:09:5C:9A:5A:70:3F:45:83:B8:26",
    "keyUsage": "Digital Signature, Key Encipherment critical",
    "extKeyUsage": "TLS Web Server Authentication, TLS Web Client Authentication",
    "publicKeyAlg": "RSA",
    "publicKeySize": 4096,
    "basicConstraints": "CA:FALSE critical",
    "subjectKeyIdentifier": "FF:D2:CF:B1:9D:2B:97:D4:F5:D4:CB:67:62:E6:68:44:3A:2F:88:46",
    "sha1Fingerprint": "A8:55:7F:B5:BA:5E:7E:62:B8:29:D6:E4:CB:5F:03:C0:DB:6F:46:67"
  },  {
    "version": 3,
    "subject": "CN=R3; O=Let's Encrypt; C=US",
    "issuer": "CN=R3; O=Let's Encrypt; C=US",
    "subjectCN": "R3",
    "signatureAlg": "sha256WithRSAEncryption",
    "notBefore": "Oct  7 19:21:40 2020 GMT",
    "notAfter": "Sep 29 19:21:40 2021 GMT",
    "expired": false,
    "serialNo": "40:01:75:04:83:14:A4:C8:21:8C:84:A9:0C:16:CD:DF",
    "keyUsage": "Digital Signature, Certificate Sign, CRL Sign critical",
    "extKeyUsage": "TLS Web Server Authentication, TLS Web Client Authentication",
    "publicKeyAlg": "RSA",
    "publicKeySize": 2048,
    "basicConstraints": "CA:TRUE, pathlen:0 critical",
    "subjectKeyIdentifier": "14:2E:B3:17:B7:58:56:CB:AE:50:09:40:E6:1F:AF:9D:8B:14:C2:C6",
    "sha1Fingerprint": "48:50:4E:97:4C:0D:AC:5B:5C:D4:76:C8:20:22:74:B2:4C:8C:71:72"
  } ]
}

PHP ile host,ip, Tlsversion ve subject”CN=R3; O=Let’s Encrypt; C=US” kısımlarını alalım. Bunlar için ilk değer:isim çiftlerini görebiliyoruz olmamız gerekir.

file_get_contents fonksiyonu json dosyasının içeriğini almamız sağlar.

json_decode fonksiyonu dosyayı string ifadeye çevirmeye yarar.

Tek zor gelebilecek satır bu olabilir. Buradaki [1] indis değerini 1 yapma sebebimiz dizinin iki elamanı bulunmasıdır. Okumak istediğimiz değer ikinci birinci indisde tutulan değerdir.

    echo "Subject: ".$json['certificateChain'][1]['subject'];
//asimmisirli.com
function readJson(){
    $jsonData = file_get_contents("result.json");
    $json = json_decode($jsonData,true);
    echo "hostname: ".$json['host']."\n";
    echo "ip adresi: ".$json['ip']."\n";
    echo "tlsVersions: ",$json['tlsVersions'][0]."\n";
    echo "Subject: ".$json['certificateChain'][1]['subject'];


}
readJson();

Kod çalıştırıldığı zaman yukarıda ki sonuç verecektir.

Yorum yapın