{"id":31880,"date":"2025-10-15T05:01:40","date_gmt":"2025-10-15T02:01:40","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/"},"modified":"2025-10-15T05:01:40","modified_gmt":"2025-10-15T02:01:40","slug":"openssl-ile-c-dilinde-http-sunucusunu-sifreleme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/","title":{"rendered":"OpenSSL ile C Dilinde HTTP Sunucusunu \u015eifreleme"},"content":{"rendered":"<p><body><\/p>\n<p>\n        HTTP sunucunuzdaki hassas verilerinizi g\u00fcvende tutmak ister misiniz? G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131 verilerinin gizlili\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, bir web uygulamas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Bu makalede, OpenSSL k\u00fct\u00fcphanesini kullanarak C dilinde geli\u015ftirdi\u011finiz HTTP sunucunuzu nas\u0131l g\u00fcvenli bir HTTPS sunucusuna d\u00f6n\u00fc\u015ft\u00fcrece\u011finizi ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.\n    <\/p>\n<p>\n        \u0130nternet \u00fczerindeki bilgi al\u0131\u015fveri\u015finin omurgas\u0131n\u0131 olu\u015fturan HTTP (Hypertext Transfer Protocol), ba\u015flang\u0131\u00e7ta basit ve \u015fifresiz bir ileti\u015fim protokol\u00fc olarak tasarlanm\u0131\u015ft\u0131r. Ancak, g\u00fcn\u00fcm\u00fcz\u00fcn tehditlerle dolu siber ortam\u0131nda, bu \u015fifresiz do\u011fa ciddi g\u00fcvenlik riskleri bar\u0131nd\u0131r\u0131r. Bir HTTP ba\u011flant\u0131s\u0131 \u00fczerinden g\u00f6nderilen her t\u00fcrl\u00fc bilgi \u2013 kullan\u0131c\u0131 adlar\u0131, \u015fifreler, kredi kart\u0131 bilgileri, ki\u015fisel mesajlar \u2013 a\u011fdaki k\u00f6t\u00fc niyetli ki\u015filer taraf\u0131ndan kolayca ele ge\u00e7irilebilir, okunabilir ve hatta de\u011fi\u015ftirilebilir. Bu durum, &#8220;Man-in-the-Middle&#8221; (Ortadaki Adam) sald\u0131r\u0131lar\u0131 olarak bilinen tehlikeli senaryolar\u0131n \u00f6n\u00fcn\u00fc a\u00e7ar ve hem kullan\u0131c\u0131lar\u0131n gizlili\u011fini ihlal eder hem de veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc tehlikeye atar. Dolay\u0131s\u0131yla, HTTP sunucumuzu \u015fifrelemek, sadece iste\u011fe ba\u011fl\u0131 bir \u00f6zellik olmaktan \u00e7\u0131km\u0131\u015f, modern internet g\u00fcvenli\u011finin temel bir gereklili\u011fi haline gelmi\u015ftir.\n    <\/p>\n<p>\n        Sunucumuzu \u015fifrelemenin en temel amac\u0131, istemci ile sunucu aras\u0131nda aktar\u0131lan verilerin gizlili\u011fini sa\u011flamakt\u0131r. Bu, TLS (Transport Layer Security) veya eski ad\u0131yla SSL (Secure Sockets Layer) protokollerinin devreye girmesiyle m\u00fcmk\u00fcn olur. TLS\/SSL, verileri \u015fifreleyerek, yetkisiz ki\u015filerin i\u00e7eri\u011fi okumas\u0131n\u0131 engeller. B\u00f6ylece, kullan\u0131c\u0131lar\u0131n ki\u015fisel bilgileri, bankac\u0131l\u0131k i\u015flemleri veya ticari s\u0131rlar\u0131 gibi hassas veriler, internet \u00fczerinden g\u00fcvenle aktar\u0131labilir. \u00d6rne\u011fin, bir e-ticaret sitesi d\u00fc\u015f\u00fcn\u00fcn; m\u00fc\u015fterilerin \u00f6deme bilgilerini \u015fifresiz g\u00f6ndermesi, hem m\u00fc\u015fteriler i\u00e7in b\u00fcy\u00fck bir risk olu\u015fturur hem de i\u015fletmenin itibar\u0131na onar\u0131lamaz zararlar verebilir. Bu nedenle, HTTPS (HTTP Secure) kullan\u0131m\u0131, e-ticaret siteleri i\u00e7in kritik bir standartt\u0131r.\n    <\/p>\n<p>\n        Gizlili\u011fin yan\u0131 s\u0131ra, veri b\u00fct\u00fcnl\u00fc\u011f\u00fc de \u015fifrelemenin sa\u011flad\u0131\u011f\u0131 \u00f6nemli faydalardan biridir. TLS\/SSL protokolleri, aktar\u0131lan verilerin g\u00f6nderildi\u011fi haliyle al\u0131c\u0131ya ula\u015ft\u0131\u011f\u0131n\u0131 ve yol boyunca herhangi bir manip\u00fclasyona u\u011framad\u0131\u011f\u0131n\u0131 garanti eder. Bir sald\u0131rgan\u0131n, banka hesab\u0131na g\u00f6nderilen bir havale miktar\u0131n\u0131 de\u011fi\u015ftirmesi veya bir yaz\u0131l\u0131m g\u00fcncelleme dosyas\u0131n\u0131 k\u00f6t\u00fc ama\u00e7l\u0131 bir kodla de\u011fi\u015ftirmesi gibi senaryolar, veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fcn korunmas\u0131n\u0131n ne kadar hayati oldu\u011funu a\u00e7\u0131k\u00e7a g\u00f6sterir. \u015eifreleme, bu t\u00fcr kas\u0131tl\u0131 veya kas\u0131ts\u0131z de\u011fi\u015fikliklere kar\u015f\u0131 bir kalkan g\u00f6revi g\u00f6r\u00fcr. Ayr\u0131ca, sunucu kimlik do\u011frulamas\u0131 da TLS\/SSL&#8217;nin sundu\u011fu bir ba\u015fka hayati \u00f6zelliktir. Bu sayede, istemci ba\u011fland\u0131\u011f\u0131 sunucunun ger\u00e7ekten iddia etti\u011fi sunucu oldu\u011funu do\u011frular. Bir kimlik av\u0131 (phishing) sald\u0131r\u0131s\u0131nda, k\u00f6t\u00fc niyetli bir sunucu, me\u015fru bir site gibi g\u00f6r\u00fcnerek kullan\u0131c\u0131lar\u0131 kand\u0131rmaya \u00e7al\u0131\u015fabilir. TLS\/SSL sertifikalar\u0131, bu t\u00fcr sahtecilikleri \u00f6nleyerek kullan\u0131c\u0131lar\u0131n yanl\u0131\u015f ellere d\u00fc\u015fmesini engeller.\n    <\/p>\n<p>\n        Peki, t\u00fcm bu g\u00fcvenlik faydalar\u0131n\u0131n \u00f6tesinde, neden bu kadar \u00e7ok kurum ve geli\u015ftirici HTTPS&#8217;e ge\u00e7i\u015f yap\u0131yor? Bunun \u00e7e\u015fitli pratik nedenleri de var. \u0130lk olarak, arama motorlar\u0131, \u00f6zellikle Google, HTTPS kullanan siteleri arama sonu\u00e7lar\u0131nda daha \u00fcst s\u0131ralarda listelemektedir. Bu durum, SEO (Arama Motoru Optimizasyonu) a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck bir avantaj sa\u011flar. \u0130kincisi, modern web taray\u0131c\u0131lar\u0131, \u015fifresiz HTTP sitelerini &#8220;G\u00fcvenli De\u011fil&#8221; (Not Secure) olarak i\u015faretleyerek kullan\u0131c\u0131lar\u0131 uyar\u0131r. Bu uyar\u0131lar, kullan\u0131c\u0131lar\u0131n siteye olan g\u00fcvenini sarsar ve trafik kayb\u0131na yol a\u00e7abilir. \u00dc\u00e7\u00fcnc\u00fcs\u00fc, baz\u0131 geli\u015fmi\u015f web teknolojileri, \u00f6rne\u011fin Co\u011frafi Konum API&#8217;si, Service Workers veya HTTP\/2, yaln\u0131zca g\u00fcvenli HTTPS ba\u011flant\u0131lar\u0131 \u00fczerinden kullan\u0131labilir. Son olarak, yasal d\u00fczenlemeler ve end\u00fcstri standartlar\u0131 da HTTPS kullan\u0131m\u0131n\u0131 zorunlu k\u0131lmaktad\u0131r. GDPR, KVKK gibi veri koruma yasalar\u0131 veya PCI DSS gibi \u00f6deme kart\u0131 end\u00fcstrisi standartlar\u0131, hassas veri i\u015fleyen t\u00fcm kurulu\u015flar\u0131n verileri \u015fifrelemesini gerektirir. T\u00fcm bu nedenler bir araya geldi\u011finde, HTTP sunucusunu \u015fifrelemek, art\u0131k sadece iyi bir uygulama olmaktan \u00e7\u0131km\u0131\u015f, vazge\u00e7ilmez bir zorunluluk haline gelmi\u015ftir. C dilinde OpenSSL ile bu \u015fifreleme yetene\u011fini sunucumuza kazand\u0131rmak, hem teknik bir ba\u015far\u0131 hem de kullan\u0131c\u0131lar\u0131m\u0131za kar\u015f\u0131 g\u00f6sterdi\u011fimiz bir sorumluluktur.\n    <\/p>\n<h2>OpenSSL ve TLS\/SSL Temelleri: G\u00fcvenli \u0130leti\u015fimin Anahtarlar\u0131 Nelerdir?<\/h2>\n<p>\n        HTTP sunucumuzu \u015fifreleme yolculu\u011funa \u00e7\u0131kmadan \u00f6nce, bu s\u00fcrecin kalbinde yer alan temel kavramlar\u0131 anlamam\u0131z \u00e7ok \u00f6nemli. OpenSSL, a\u00e7\u0131k kaynakl\u0131 ve olduk\u00e7a g\u00fc\u00e7l\u00fc bir kriptografi k\u00fct\u00fcphanesidir. SSL (Secure Sockets Layer) ve onun daha modern ve g\u00fcvenli halefi olan TLS (Transport Layer Security) protokollerini uygulayarak, internet \u00fczerinden g\u00fcvenli ileti\u015fim sa\u011flamak i\u00e7in geni\u015f bir ara\u00e7 yelpazesi sunar. Basit\u00e7e ifade etmek gerekirse, OpenSSL, C dilinde yaz\u0131lm\u0131\u015f programlar\u0131m\u0131z\u0131n karma\u015f\u0131k \u015fifreleme ve g\u00fcvenlik i\u015flemlerini kolayca yapabilmesini sa\u011flayan bir dizi fonksiyon ve ara\u00e7 i\u00e7erir. Bu k\u00fct\u00fcphane, sadece web sunucular\u0131nda de\u011fil, e-posta istemcilerinden VPN ba\u011flant\u0131lar\u0131na kadar pek \u00e7ok yerde g\u00fcvenli ileti\u015fimin temelini olu\u015fturur.\n    <\/p>\n<p>\n        Peki, TLS\/SSL tam olarak nedir ve nas\u0131l \u00e7al\u0131\u015f\u0131r? Temelde, TLS\/SSL, istemci (\u00f6rne\u011fin bir web taray\u0131c\u0131s\u0131) ile sunucu (web sunucumuz) aras\u0131nda g\u00fcvenli bir &#8220;el s\u0131k\u0131\u015fma&#8221; (handshake) s\u00fcreciyle ba\u015flar. Bu el s\u0131k\u0131\u015fma, bir dizi ad\u0131mdan olu\u015fur ve her iki taraf\u0131n birbirini tan\u0131mas\u0131n\u0131, \u015fifreleme algoritmalar\u0131 \u00fczerinde anla\u015fmas\u0131n\u0131 ve oturum i\u00e7in kullan\u0131lacak anahtarlar\u0131 belirlemesini sa\u011flar. S\u00fcre\u00e7 kabaca \u015fu \u015fekildedir:\n    <\/p>\n<ol>\n<li><strong>\u0130stemci Merhaba (Client Hello):<\/strong> \u0130stemci, sunucuya bir &#8220;Merhaba&#8221; mesaj\u0131 g\u00f6nderir. Bu mesajda, destekledi\u011fi TLS s\u00fcr\u00fcm\u00fc, \u015fifreleme algoritmalar\u0131 (cipher suites) listesi ve rastgele bir say\u0131 bulunur.<\/li>\n<li><strong>Sunucu Merhaba (Server Hello):<\/strong> Sunucu, istemcinin destekledi\u011fi algoritmalar aras\u0131ndan en uygun olanlar\u0131 se\u00e7er ve kendi TLS s\u00fcr\u00fcm\u00fcn\u00fc, se\u00e7ti\u011fi \u015fifreleme algoritmalar\u0131n\u0131 ve rastgele bir say\u0131y\u0131 i\u00e7eren bir &#8220;Merhaba&#8221; mesaj\u0131 ile yan\u0131t verir.<\/li>\n<li><strong>Sertifika (Certificate):<\/strong> Sunucu, kendisinin do\u011frulanmas\u0131n\u0131 sa\u011flayan dijital sertifikas\u0131n\u0131 istemciye g\u00f6nderir. Bu sertifika, sunucunun kimli\u011fini kan\u0131tlayan bir &#8220;sertifika yetkilisi&#8221; (Certificate Authority &#8211; CA) taraf\u0131ndan imzalanm\u0131\u015ft\u0131r.<\/li>\n<li><strong>Sunucu Anahtar De\u011fi\u015fimi (Server Key Exchange):<\/strong> E\u011fer gerekliyse, sunucu anahtar de\u011fi\u015fimi i\u00e7in gerekli parametreleri g\u00f6nderir.<\/li>\n<li><strong>Sertifika \u0130ste\u011fi (Certificate Request &#8211; \u0130ste\u011fe Ba\u011fl\u0131):<\/strong> Sunucu, istemcinin kimli\u011fini do\u011frulamak isterse, istemciden bir sertifika isteyebilir.<\/li>\n<li><strong>Sunucu Merhaba Bitti (Server Hello Done):<\/strong> Sunucu, el s\u0131k\u0131\u015fma mesajlar\u0131n\u0131 tamamlad\u0131\u011f\u0131n\u0131 bildirir.<\/li>\n<li><strong>\u0130stemci Anahtar De\u011fi\u015fimi (Client Key Exchange):<\/strong> \u0130stemci, sunucunun sertifikas\u0131n\u0131 do\u011frulad\u0131ktan sonra, oturum anahtar\u0131n\u0131 (session key) \u015fifrelemek i\u00e7in kullan\u0131lan &#8220;\u00f6n anahtar&#8221;\u0131 (pre-master secret) olu\u015fturur ve sunucunun ortak anahtar\u0131yla \u015fifreleyip g\u00f6nderir.<\/li>\n<li><strong>\u015eifreli De\u011fi\u015fim Belirtimi (Change Cipher Spec):<\/strong> Her iki taraf da \u015fifreli ileti\u015fime ge\u00e7ece\u011fini bildirir.<\/li>\n<li><strong>Bitmi\u015f Mesajlar (Finished):<\/strong> Her iki taraf da el s\u0131k\u0131\u015fman\u0131n ba\u015far\u0131yla tamamland\u0131\u011f\u0131n\u0131 ve art\u0131k \u015fifreli ileti\u015fim kurabilece\u011fini onaylayan bir mesaj g\u00f6nderir.<\/li>\n<\/ol>\n<p>\n        Bu el s\u0131k\u0131\u015fma tamamland\u0131\u011f\u0131nda, istemci ve sunucu, sadece ikisi taraf\u0131ndan bilinen simetrik bir oturum anahtar\u0131 kullanarak verileri \u015fifreleyip \u00e7\u00f6zmeye ba\u015flar. \u0130\u015fte tam da bu noktada, OpenSSL&#8217;nin g\u00fcc\u00fc ortaya \u00e7\u0131kar. OpenSSL, bu karma\u015f\u0131k el s\u0131k\u0131\u015fma s\u00fcrecini, anahtar y\u00f6netimini, \u015fifreleme ve \u015fifre \u00e7\u00f6zme i\u015flemlerini bizim i\u00e7in soyutlar, b\u00f6ylece biz sadece uygulaman\u0131n mant\u0131\u011f\u0131na odaklanabiliriz.\n    <\/p>\n<p>\n        Bu s\u00fcre\u00e7te kilit rol oynayan bir di\u011fer bile\u015fen de &#8220;dijital sertifikalar&#8221;d\u0131r. Dijital sertifika, bir nevi dijital kimlik kart\u0131d\u0131r. Web sunucumuzun kimli\u011fini do\u011frulamak i\u00e7in kullan\u0131l\u0131r ve bir sertifika yetkilisi (CA) taraf\u0131ndan imzalan\u0131r. Sertifika, sunucunun alan ad\u0131n\u0131, ortak anahtar\u0131n\u0131, ge\u00e7erlilik s\u00fcresini ve sertifika yetkilisinin imzas\u0131n\u0131 i\u00e7erir. \u0130stemci, bu sertifikay\u0131 ald\u0131\u011f\u0131nda, sertifika yetkilisinin imzas\u0131n\u0131 kendi g\u00fcvenilir CA listesiyle kar\u015f\u0131la\u015ft\u0131rarak sertifikan\u0131n ge\u00e7erlili\u011fini kontrol eder. E\u011fer sertifika ge\u00e7erliyse ve g\u00fcvenilir bir CA taraf\u0131ndan imzalanm\u0131\u015fsa, istemci sunucuya g\u00fcvenir ve g\u00fcvenli ileti\u015fimi ba\u015flat\u0131r. Kendi sunucumuz i\u00e7in OpenSSL kullanarak kendi imzal\u0131 (self-signed) sertifikalar olu\u015fturaca\u011f\u0131z, ancak \u00fcretim ortamlar\u0131nda g\u00fcvenilir bir CA&#8217;dan sertifika almak esast\u0131r. Unutmay\u0131n ki, g\u00fcvenlik sadece bir katman de\u011fildir; birbiriyle entegre \u00e7al\u0131\u015fan pek \u00e7ok mekanizman\u0131n birle\u015fimidir. OpenSSL, bu mekanizmalar\u0131n C dilindeki en g\u00fc\u00e7l\u00fc uygulay\u0131c\u0131lar\u0131ndan biridir.\n    <\/p>\n<h2>C Dilinde Basit Bir HTTP Sunucusu Nas\u0131l Olu\u015fturulur?<\/h2>\n<p>\n        \u015eifreli bir HTTP sunucusuna ge\u00e7i\u015f yapmadan \u00f6nce, temel bir C tabanl\u0131 HTTP sunucusu iskeletine ihtiyac\u0131m\u0131z var. Bu iskelet, a\u011f ba\u011flant\u0131lar\u0131n\u0131 kabul edecek, gelen istekleri okuyacak ve basit bir yan\u0131t g\u00f6nderecektir. OpenSSL entegrasyonu i\u00e7in sa\u011flam bir temel olu\u015fturmak amac\u0131yla, POSIX soket programlama API&#8217;lerini kullanarak basit bir sunucu olu\u015ftural\u0131m. Bu b\u00f6l\u00fcm, a\u011f programlamaya yeni ba\u015flayanlar i\u00e7in de bir giri\u015f niteli\u011fi ta\u015f\u0131maktad\u0131r.\n    <\/p>\n<p>\n        \u0130lk olarak, sunucumuzun dinleyece\u011fi bir soket olu\u015fturmam\u0131z gerekiyor. Soket, iki program\u0131n a\u011f \u00fczerinden ileti\u015fim kurmas\u0131n\u0131 sa\u011flayan bir ileti\u015fim noktas\u0131d\u0131r. Ard\u0131ndan, bu soketi belirli bir IP adresi ve port numaras\u0131na ba\u011flayacak (bind) ve gelen ba\u011flant\u0131lar\u0131 dinlemeye ba\u015flayaca\u011f\u0131z (listen). Son olarak, bir d\u00f6ng\u00fc i\u00e7inde gelen her ba\u011flant\u0131y\u0131 kabul edecek (accept) ve bu ba\u011flant\u0131 \u00fczerinden istemciyle etkile\u015fime girece\u011fiz.\n    <\/p>\n<p>\n        A\u015fa\u011f\u0131da, sadece &#8220;Hello, World!&#8221; mesaj\u0131n\u0131 d\u00f6nd\u00fcren ve sonsuz bir d\u00f6ng\u00fcde \u00e7al\u0131\u015fan basit bir HTTP sunucusu \u00f6rne\u011fi bulunmaktad\u0131r. G\u00fcvenlik ve hata y\u00f6netimi \u015fimdilik minimal d\u00fczeyde tutulmu\u015ftur, as\u0131l amac\u0131m\u0131z OpenSSL entegrasyonuna bir zemin haz\u0131rlamakt\u0131r.\n    <\/p>\n<pre><code>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <unistd.h>\n#include <sys\/socket.h>\n#include <netinet\/in.h>\n\n#define PORT 8080\n#define BUFFER_SIZE 1024\n\nint main() {\n    int server_fd, new_socket;\n    struct sockaddr_in address;\n    int opt = 1;\n    int addrlen = sizeof(address);\n    char buffer[BUFFER_SIZE] = {0};\n    const char *hello_message = \"HTTP\/1.1 200 OK\\r\\nContent-Type: text\/plain\\r\\nContent-Length: 13\\r\\n\\r\\nHello, World!\";\n\n    \/\/ Soket olu\u015fturma\n    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {\n        perror(\"Soket olu\u015fturma hatas\u0131\");\n        exit(EXIT_FAILURE);\n    }\n\n    \/\/ Soket se\u00e7eneklerini ayarlama (portu tekrar kullanabilmek i\u00e7in)\n    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {\n        perror(\"setsockopt hatas\u0131\");\n        exit(EXIT_FAILURE);\n    }\n    address.sin_family = AF_INET;\n    address.sin_addr.s_addr = INADDR_ANY; \/\/ Herhangi bir aray\u00fczden gelen ba\u011flant\u0131lar\u0131 kabul et\n    address.sin_port = htons(PORT);     \/\/ Belirtilen portu kullan\n\n    \/\/ Soketi belirtilen adrese ve porta ba\u011flama\n    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {\n        perror(\"Ba\u011flama hatas\u0131\");\n        exit(EXIT_FAILURE);\n    }\n\n    \/\/ Gelen ba\u011flant\u0131lar\u0131 dinlemeye ba\u015flama (maksimum 10 bekleyen ba\u011flant\u0131)\n    if (listen(server_fd, 10) < 0) {\n        perror(\"Dinleme hatas\u0131\");\n        exit(EXIT_FAILURE);\n    }\n\n    printf(\"Sunucu %d numaral\u0131 portta dinliyor...\\n\", PORT);\n\n    \/\/ Sonsuz d\u00f6ng\u00fcde ba\u011flant\u0131lar\u0131 kabul etme ve i\u015fleme\n    while(1) {\n        \/\/ Yeni bir ba\u011flant\u0131y\u0131 kabul etme\n        if ((new_socket = accept(server_fd, (struct sockaddr *)&#038;address, (socklen_t*)&#038;addrlen)) < 0) {\n            perror(\"Kabul hatas\u0131\");\n            exit(EXIT_FAILURE);\n        }\n\n        \/\/ \u0130stemciden veri okuma\n        read(new_socket, buffer, BUFFER_SIZE);\n        printf(\"Gelen \u0130stek:\\n%s\\n\", buffer);\n\n        \/\/ \u0130stemciye yan\u0131t g\u00f6nderme\n        write(new_socket, hello_message, strlen(hello_message));\n        printf(\"Yan\u0131t g\u00f6nderildi.\\n\");\n\n        \/\/ Ba\u011flant\u0131y\u0131 kapatma\n        close(new_socket);\n    }\n\n    return 0;\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Yukar\u0131daki kodu derlemek i\u00e7in, genellikle bir C derleyicisi (\u00f6rne\u011fin GCC) kullanabilirsiniz: <code>gcc basic_http_server.c -o basic_http_server<\/code>. Ard\u0131ndan <code>.<\/code>\/<code>basic_http_server<\/code> komutuyla \u00e7al\u0131\u015ft\u0131rabilirsiniz. Bu sunucu \u00e7al\u0131\u015ft\u0131\u011f\u0131nda, bir web taray\u0131c\u0131s\u0131 a\u00e7\u0131p <code>http:\/\/localhost:8080<\/code> adresine giderek \"Hello, World!\" mesaj\u0131n\u0131 g\u00f6rmelisiniz. Bu temel yap\u0131, HTTP\/1.1 protokol\u00fcn\u00fcn en basit halini taklit etmektedir. Ger\u00e7ek bir web sunucusu, MIME tiplerini, dosya sisteminden i\u00e7erik sunmay\u0131 ve daha karma\u015f\u0131k HTTP ba\u015fl\u0131klar\u0131n\u0131 y\u00f6netmeyi de i\u00e7erir. Ancak bizim amac\u0131m\u0131z i\u00e7in, bu basit sunucu OpenSSL entegrasyonu i\u00e7in yeterli bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r.\n    <\/p>\n<p>\n        Bu basit sunucu, her gelen ba\u011flant\u0131y\u0131 tek bir i\u015flemde i\u015fler ve hemen kapat\u0131r. Daha geli\u015fmi\u015f sunucular, ayn\u0131 anda birden fazla ba\u011flant\u0131y\u0131 i\u015flemek i\u00e7in <code>fork()<\/code> kullanarak yeni s\u00fcre\u00e7ler olu\u015fturabilir, <code>pthread<\/code> kullanarak i\u015f par\u00e7ac\u0131klar\u0131 kullanabilir veya <code>select()<\/code>, <code>poll()<\/code>, <code>epoll()<\/code> gibi non-blocking I\/O mekanizmalar\u0131n\u0131 kullanabilir. Ancak bu makalede, g\u00fcvenlik katman\u0131na odaklanaca\u011f\u0131m\u0131zdan, bu t\u00fcr karma\u015f\u0131kl\u0131klardan \u015fimdilik ka\u00e7\u0131n\u0131yoruz. Temel HTTP sunucusu haz\u0131r oldu\u011funa g\u00f6re, art\u0131k OpenSSL ile sertifika ve anahtar olu\u015fturma ad\u0131mlar\u0131na ge\u00e7ebiliriz. Bu, sunucumuzun kimli\u011fini kan\u0131tlamas\u0131 ve \u015fifreli ileti\u015fimi ba\u015flatmas\u0131 i\u00e7in kritik \u00f6neme sahiptir.\n    <\/p>\n<h2>OpenSSL ile Sunucu Anahtar\u0131 ve Sertifika Haz\u0131rl\u0131\u011f\u0131 Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>\n        G\u00fcvenli bir HTTPS sunucusu olu\u015fturman\u0131n en \u00f6nemli ad\u0131mlar\u0131ndan biri, sunucunun kimli\u011fini do\u011frulayacak bir dijital sertifika ve bu sertifikayla e\u015fle\u015fen \u00f6zel anahtar olu\u015fturmakt\u0131r. OpenSSL, bu anahtar \u00e7iftini ve sertifikay\u0131 olu\u015fturmak i\u00e7in g\u00fc\u00e7l\u00fc komut sat\u0131r\u0131 ara\u00e7lar\u0131 sunar. Bu b\u00f6l\u00fcmde, kendi kendimize imzalad\u0131\u011f\u0131m\u0131z (self-signed) bir sertifika olu\u015fturma s\u00fcrecini ad\u0131m ad\u0131m ele alaca\u011f\u0131z. \u00dcretim ortamlar\u0131nda genellikle bir Sertifika Yetkilisinden (CA) al\u0131nan g\u00fcvenilir sertifikalar kullan\u0131l\u0131rken, geli\u015ftirme ve test ama\u00e7lar\u0131 i\u00e7in self-signed sertifikalar olduk\u00e7a kullan\u0131\u015fl\u0131d\u0131r.\n    <\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: \u00dcretim ortam\u0131nda self-signed sertifika kullanmak, taray\u0131c\u0131lar\u0131n \"g\u00fcvenli de\u011fil\" uyar\u0131s\u0131 vermesine neden olur. Bu nedenle, Let's Encrypt gibi \u00fccretsiz veya ticari CA'lardan sertifika alman\u0131z \u00f6nerilir.\n    <\/div>\n<p>\n        \u0130lk ad\u0131m, sunucumuz i\u00e7in \u00f6zel bir anahtar olu\u015fturmakt\u0131r. \u00d6zel anahtar, \u015fifreli ileti\u015fimi ba\u015flatmak ve sunucunun sertifikas\u0131n\u0131 imzalamak i\u00e7in kullan\u0131l\u0131r. Bu anahtar\u0131n gizli kalmas\u0131 hayati \u00f6neme sahiptir; k\u00f6t\u00fc niyetli bir ki\u015fi \u00f6zel anahtara eri\u015firse, sunucunuzun kimli\u011fine b\u00fcr\u00fcnebilir. Genellikle RSA (Rivest\u2013Shamir\u2013Adleman) veya ECDSA (Elliptic Curve Digital Signature Algorithm) gibi asimetrik \u015fifreleme algoritmalar\u0131 kullan\u0131l\u0131r. Biz bu \u00f6rnekte RSA kullanaca\u011f\u0131z.\n    <\/p>\n<pre><code>\n# \u00d6zel anahtar olu\u015fturma (2048 bit RSA anahtar\u0131)\nopenssl genrsa -out server.key 2048\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Bu komut, <code>server.key<\/code> ad\u0131nda 2048 bitlik bir RSA \u00f6zel anahtar\u0131 olu\u015fturacakt\u0131r. Bit say\u0131s\u0131, anahtar\u0131n g\u00fcc\u00fcn\u00fc belirtir; genellikle 2048 veya 4096 bit tercih edilir. Anahtar olu\u015fturulduktan sonra, bu anahtar\u0131 kullanarak bir \"Sertifika \u0130mzalama \u0130ste\u011fi\" (Certificate Signing Request - CSR) olu\u015fturmam\u0131z gerekir. CSR, sertifika yetkilisine g\u00f6nderece\u011fimiz ve sunucumuzun kimlik bilgilerini i\u00e7eren bir dosyad\u0131r.\n    <\/p>\n<pre><code>\n# Sertifika \u0130mzalama \u0130ste\u011fi (CSR) olu\u015fturma\nopenssl req -new -key server.key -out server.csr\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, OpenSSL size birka\u00e7 soru soracakt\u0131r. Bu sorulara verece\u011finiz cevaplar (\u00fclke kodu, eyalet, \u015fehir, kurulu\u015f ad\u0131, ortak ad (Common Name - CN) vb.), sertifikan\u0131z\u0131n i\u00e7eri\u011fini olu\u015fturacakt\u0131r. Ortak ad (Common Name), genellikle sunucunuzun tam alan ad\u0131d\u0131r (\u00f6rne\u011fin, <code>www.ornek.com<\/code>). Self-signed sertifikalar i\u00e7in <code>localhost<\/code> veya sunucunuzun IP adresi de kullan\u0131labilir. Bu ad\u0131mda girdi\u011finiz bilgiler, sertifikan\u0131zda g\u00f6r\u00fcnecek ve sunucunuzun kimli\u011fini tan\u0131mlayacakt\u0131r.\n    <\/p>\n<p>\n        Son ad\u0131m, \u00f6zel anahtar\u0131m\u0131z ve CSR dosyam\u0131z\u0131 kullanarak kendi kendimize imzalad\u0131\u011f\u0131m\u0131z bir sertifika olu\u015fturmakt\u0131r. Bu sertifika, <code>server.crt<\/code> ad\u0131yla kaydedilecektir. Kendi kendimize imzalad\u0131\u011f\u0131m\u0131z i\u00e7in, sertifika yetkilisi olarak kendimizi at\u0131yoruz ve sertifikay\u0131 \u00f6zel anahtar\u0131m\u0131zla imzal\u0131yoruz.\n    <\/p>\n<pre><code>\n# Kendi kendine imzal\u0131 (self-signed) sertifika olu\u015fturma\nopenssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Bu komut, <code>server.csr<\/code> dosyas\u0131ndaki bilgileri kullanarak ve <code>server.key<\/code> ile imzalayarak 365 g\u00fcn ge\u00e7erli olacak bir <code>server.crt<\/code> dosyas\u0131 olu\u015fturur. <code>server.crt<\/code> dosyas\u0131, sunucunuzun ortak anahtar\u0131n\u0131 ve di\u011fer kimlik bilgilerini i\u00e7erir. Art\u0131k elimizde, HTTPS sunucumuzu aya\u011fa kald\u0131rmak i\u00e7in gerekli olan \u00f6zel anahtar (<code>server.key<\/code>) ve dijital sertifika (<code>server.crt<\/code>) dosyalar\u0131 bulunuyor. Bu iki dosya, C dilindeki HTTP sunucumuza OpenSSL k\u00fct\u00fcphanesini entegre ederken kullan\u0131lacak temel bile\u015fenlerdir.\n    <\/p>\n<p>\n        Bu dosyalar haz\u0131r oldu\u011funda, sunucumuzun OpenSSL k\u00fct\u00fcphanesiyle \u00e7al\u0131\u015fmaya ba\u015flamas\u0131 i\u00e7in gerekli altyap\u0131y\u0131 olu\u015fturmu\u015f olaca\u011f\u0131z. Bu ad\u0131mlar, g\u00fcvenli ileti\u015fimin temelini atar ve sunucumuzun istemcilere kendini g\u00fcvenilir bir \u015fekilde tan\u0131tmas\u0131n\u0131 sa\u011flar. Unutulmamal\u0131d\u0131r ki, <code>server.key<\/code> dosyas\u0131 gizli kalmal\u0131 ve asla ba\u015fkalar\u0131yla payla\u015f\u0131lmamal\u0131d\u0131r. Bu anahtar\u0131n ele ge\u00e7irilmesi, t\u00fcm g\u00fcvenlik mekanizmas\u0131n\u0131 ge\u00e7ersiz k\u0131labilir. Bu nedenle, anahtar dosyalar\u0131n\u0131n eri\u015fim izinleri do\u011fru \u015fekilde ayarlanmal\u0131 ve g\u00fcvenli bir konumda saklanmal\u0131d\u0131r. Sertifika haz\u0131rl\u0131\u011f\u0131 tamamland\u0131\u011f\u0131na g\u00f6re, art\u0131k C kodumuza OpenSSL entegrasyonuna ge\u00e7ebiliriz.\n    <\/p>\n<h2>C Dilindeki HTTP Sunucumuza OpenSSL Deste\u011fi Nas\u0131l Entegre Edilir?<\/h2>\n<p>\n        \u00d6zel anahtar\u0131m\u0131z\u0131 ve sertifikam\u0131z\u0131 olu\u015fturduktan sonra, s\u0131ra geldi C dilindeki temel HTTP sunucumuzu ger\u00e7ek bir HTTPS sunucusuna d\u00f6n\u00fc\u015ft\u00fcrmeye. Bu, OpenSSL k\u00fct\u00fcphanesinin fonksiyonlar\u0131n\u0131 kullanarak soket ileti\u015fimini \u015fifrelemek anlam\u0131na geliyor. Bu b\u00f6l\u00fcmde, daha \u00f6nce yazd\u0131\u011f\u0131m\u0131z basit HTTP sunucusu kodunu OpenSSL ile uyumlu hale getirmek i\u00e7in gerekli de\u011fi\u015fiklikleri ad\u0131m ad\u0131m inceleyece\u011fiz. Bu entegrasyon, karma\u015f\u0131k g\u00f6r\u00fcnen \u015fifreleme i\u015flemlerini bizim i\u00e7in basitle\u015ftirecek ve g\u00fcvenli bir ileti\u015fim katman\u0131 ekleyecektir.\n    <\/p>\n<p>\n        \u0130lk olarak, OpenSSL k\u00fct\u00fcphanesini kullanmak i\u00e7in gerekli ba\u015fl\u0131k dosyalar\u0131n\u0131 dahil etmemiz ve k\u00fct\u00fcphaneyi ba\u015flatmam\u0131z gerekiyor. Bu genellikle <code>SSL_library_init()<\/code>, <code>OpenSSL_add_all_algorithms()<\/code> ve <code>SSL_load_error_strings()<\/code> fonksiyonlar\u0131 ile yap\u0131l\u0131r. Bu fonksiyonlar, OpenSSL k\u00fct\u00fcphanesinin d\u00fczg\u00fcn \u00e7al\u0131\u015fmas\u0131 i\u00e7in gerekli olan t\u00fcm algoritmalar\u0131 ve hata mesajlar\u0131n\u0131 y\u00fckler.\n    <\/p>\n<pre><code>\n#include <openssl\/ssl.h>\n#include <openssl\/err.h>\n\n\/\/ ... di\u011fer include'lar\n\n\/\/ OpenSSL'i ba\u015flatma fonksiyonu\nvoid init_openssl() {\n    SSL_library_init();\n    OpenSSL_add_all_algorithms();\n    SSL_load_error_strings();\n}\n\n\/\/ OpenSSL'i temizleme fonksiyonu\nvoid cleanup_openssl() {\n    EVP_cleanup();\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Ard\u0131ndan, bir SSL ba\u011flam\u0131 (SSL Context) olu\u015fturmam\u0131z gerekiyor. Bu ba\u011flam, TLS\/SSL oturumlar\u0131 i\u00e7in genel ayarlar\u0131, sertifikalar\u0131 ve \u00f6zel anahtarlar\u0131 tutar. <code>SSL_CTX_new()<\/code> fonksiyonu ile bir ba\u011flam olu\u015fturulur ve <code>SSL_CTX_use_certificate_file()<\/code> ile sertifikam\u0131z\u0131, <code>SSL_CTX_use_PrivateKey_file()<\/code> ile \u00f6zel anahtar\u0131m\u0131z\u0131 bu ba\u011flama y\u00fckl\u00fcyoruz.\n    <\/p>\n<pre><code>\n\/\/ main fonksiyonunun i\u00e7inde veya ayr\u0131 bir fonksiyon olarak\nSSL_CTX *ctx;\n\n\/\/ TLSv1.2 veya TLSv1.3 kullanmak i\u00e7in g\u00fcvenli bir metot se\u00e7imi\nconst SSL_METHOD *method = TLS_server_method(); \nctx = SSL_CTX_new(method);\n\nif (!ctx) {\n    perror(\"SSL_CTX olu\u015fturma hatas\u0131\");\n    ERR_print_errors_fp(stderr);\n    exit(EXIT_FAILURE);\n}\n\n\/\/ Sertifika ve \u00f6zel anahtar\u0131 y\u00fckleme\nif (SSL_CTX_use_certificate_file(ctx, \"server.crt\", SSL_FILETYPE_PEM) <= 0) {\n    ERR_print_errors_fp(stderr);\n    exit(EXIT_FAILURE);\n}\nif (SSL_CTX_use_PrivateKey_file(ctx, \"server.key\", SSL_FILETYPE_PEM) <= 0 ) {\n    ERR_print_errors_fp(stderr);\n    exit(EXIT_FAILURE);\n}\n\/\/ \u00d6zel anahtar\u0131n sertifikaya uygunlu\u011funu kontrol etme\nif (!SSL_CTX_check_private_key(ctx)) {\n    fprintf(stderr, \"\u00d6zel anahtar sertifikaya uymuyor.\\n\");\n    exit(EXIT_FAILURE);\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        Bu ad\u0131mlar\u0131 tamamlad\u0131ktan sonra, temel sunucu kodumuzdaki <code>accept()<\/code> \u00e7a\u011fr\u0131s\u0131ndan sonra, <code>new_socket<\/code> dosya tan\u0131mlay\u0131c\u0131s\u0131n\u0131 kullanarak bir SSL nesnesi olu\u015fturmam\u0131z ve bir TLS\/SSL el s\u0131k\u0131\u015fmas\u0131 ba\u015flatmam\u0131z gerekiyor. Her yeni istemci ba\u011flant\u0131s\u0131 i\u00e7in yeni bir <code>SSL<\/code> nesnesi (<code>SSL_new()<\/code>) olu\u015fturulur ve bu nesneye soket ba\u011flan\u0131r (<code>SSL_set_fd()<\/code>). Ard\u0131ndan, <code>SSL_accept()<\/code> \u00e7a\u011fr\u0131s\u0131 ile TLS\/SSL el s\u0131k\u0131\u015fma i\u015flemi ger\u00e7ekle\u015ftirilir. El s\u0131k\u0131\u015fma ba\u015far\u0131l\u0131 olursa, art\u0131k bu <code>SSL<\/code> nesnesi \u00fczerinden \u015fifreli ileti\u015fim kurabiliriz.\n    <\/p>\n<pre><code>\n\/\/ Sonsuz d\u00f6ng\u00fc i\u00e7indeki accept() \u00e7a\u011fr\u0131s\u0131ndan sonra\n\/\/ ...\n        \/\/ Yeni bir ba\u011flant\u0131y\u0131 kabul etme\n        if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {\n            perror(\"Kabul hatas\u0131\");\n            exit(EXIT_FAILURE);\n        }\n\n        SSL *ssl = SSL_new(ctx); \/\/ Yeni bir SSL oturumu olu\u015ftur\n        SSL_set_fd(ssl, new_socket); \/\/ Soketi SSL oturumuna ba\u011fla\n\n        if (SSL_accept(ssl) <= 0) { \/\/ TLS\/SSL el s\u0131k\u0131\u015fmas\u0131n\u0131 ger\u00e7ekle\u015ftir\n            ERR_print_errors_fp(stderr);\n            close(new_socket);\n            SSL_free(ssl); \/\/ SSL nesnesini temizle\n            continue; \/\/ Bir sonraki ba\u011flant\u0131ya ge\u00e7\n        }\n\n        \/\/ \u0130stemciden veri okuma (Art\u0131k read yerine SSL_read kullan\u0131yoruz)\n        int bytes_read = SSL_read(ssl, buffer, BUFFER_SIZE);\n        if (bytes_read > 0) {\n            buffer[bytes_read] = '\\0'; \/\/ Null-terminate the string\n            printf(\"Gelen \u015eifreli \u0130stek:\\n%s\\n\", buffer);\n        } else {\n            ERR_print_errors_fp(stderr);\n        }\n\n        \/\/ \u0130stemciye yan\u0131t g\u00f6nderme (Art\u0131k write yerine SSL_write kullan\u0131yoruz)\n        SSL_write(ssl, hello_message, strlen(hello_message));\n        printf(\"\u015eifreli Yan\u0131t g\u00f6nderildi.\\n\");\n\n        \/\/ SSL oturumunu ve soketi kapatma\n        SSL_shutdown(ssl); \/\/ TLS\/SSL oturumunu kapat\n        SSL_free(ssl);     \/\/ SSL nesnesini temizle\n        close(new_socket); \/\/ Soketi kapat\n    }\n\n    \/\/ Sunucu kapan\u0131rken SSL ba\u011flam\u0131n\u0131 temizle\n    SSL_CTX_free(ctx);\n    cleanup_openssl(); \/\/ OpenSSL temizleme\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        T\u00fcm bu de\u011fi\u015fiklikler yap\u0131ld\u0131ktan sonra, kodumuzu derlerken OpenSSL k\u00fct\u00fcphanelerini ba\u011flamay\u0131 unutmamal\u0131y\u0131z. Genellikle <code>gcc<\/code> ile derlerken <code>-lssl<\/code> ve <code>-lcrypto<\/code> bayraklar\u0131n\u0131 kullan\u0131r\u0131z: <code>gcc secure_http_server.c -o secure_http_server -lssl -lcrypto<\/code>. Bu \u015fekilde, derleyici OpenSSL'in fonksiyon tan\u0131mlar\u0131n\u0131 ve k\u00fct\u00fcphane dosyalar\u0131n\u0131 bulabilir. Art\u0131k sunucumuz, gelen ba\u011flant\u0131lar\u0131 \u015fifreli bir \u015fekilde kabul edebilecek ve istemcilerle g\u00fcvenli bir TLS\/SSL oturumu kurabilecektir. Bu entegrasyon, HTTP'nin g\u00fcvensiz do\u011fas\u0131n\u0131 ortadan kald\u0131rarak, uygulamam\u0131za modern bir g\u00fcvenlik katman\u0131 eklemi\u015f olur. Sunucumuzu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra <code>https:\/\/localhost:8080<\/code> adresinden eri\u015ferek test edebiliriz. Taray\u0131c\u0131n\u0131n self-signed sertifikaya ili\u015fkin bir uyar\u0131 vermesi normaldir, \u00e7\u00fcnk\u00fc bu sertifika bilinen bir CA taraf\u0131ndan imzalanmam\u0131\u015ft\u0131r. Ancak ba\u011flant\u0131n\u0131n HTTPS \u00fczerinden sa\u011fland\u0131\u011f\u0131n\u0131 g\u00f6rece\u011fiz.\n    <\/p>\n<h2>G\u00fcvenli \u0130leti\u015fimi Test Etme ve Yayg\u0131n Hatalardan Ka\u00e7\u0131nma Yollar\u0131 Nelerdir?<\/h2>\n<p>\n        OpenSSL entegrasyonu tamamland\u0131ktan sonra, sunucumuzun ger\u00e7ekten g\u00fcvenli bir \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulamak kritik bir ad\u0131md\u0131r. Test etme s\u00fcreci, sadece ba\u011flant\u0131n\u0131n kurulup kurulmad\u0131\u011f\u0131n\u0131 de\u011fil, ayn\u0131 zamanda \u015fifreleme g\u00fcc\u00fcn\u00fc ve olas\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 da kontrol etmeyi i\u00e7erir. Ayr\u0131ca, bu s\u00fcre\u00e7te ortaya \u00e7\u0131kabilecek yayg\u0131n hatalar\u0131 ve \u00e7\u00f6z\u00fcmlerini bilmek, geli\u015ftirme s\u00fcrecinizi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde h\u0131zland\u0131racakt\u0131r.\n    <\/p>\n<h3>HTTPS Ba\u011flant\u0131s\u0131n\u0131 Nas\u0131l Test Edebiliriz?<\/h3>\n<p>\n        Sunucunuzu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra, en basit test y\u00f6ntemi bir web taray\u0131c\u0131s\u0131 kullanmakt\u0131r. Adres \u00e7ubu\u011funa <code>https:\/\/localhost:PORT<\/code> (\u00f6rne\u011fin, <code>https:\/\/localhost:8080<\/code>) yazarak sunucunuza eri\u015fmeye \u00e7al\u0131\u015f\u0131n. Self-signed bir sertifika kulland\u0131\u011f\u0131m\u0131z i\u00e7in, taray\u0131c\u0131n\u0131z muhtemelen bir g\u00fcvenlik uyar\u0131s\u0131 g\u00f6sterecektir. Bu uyar\u0131 genellikle \"Ba\u011flant\u0131n\u0131z g\u00fcvenli de\u011fil\" veya \"Ge\u00e7ersiz sertifika\" \u015feklinde olur. Bu durum, taray\u0131c\u0131n\u0131n sertifikan\u0131z\u0131 g\u00fcvenilir bir otorite taraf\u0131ndan imzalanm\u0131\u015f olarak tan\u0131mamas\u0131ndan kaynaklan\u0131r ve beklenen bir davran\u0131\u015ft\u0131r. Uyar\u0131ya ra\u011fmen devam etmeyi se\u00e7ti\u011finizde, sunucunuzdan gelen \"Hello, World!\" mesaj\u0131n\u0131 g\u00f6rmelisiniz. Bu, HTTPS el s\u0131k\u0131\u015fmas\u0131n\u0131n ba\u015far\u0131l\u0131 oldu\u011funu ve verilerin \u015fifreli olarak iletildi\u011fini g\u00f6sterir.\n    <\/p>\n<p>\n        Daha teknik bir test i\u00e7in, <code>curl<\/code> veya <code>openssl s_client<\/code> gibi komut sat\u0131r\u0131 ara\u00e7lar\u0131n\u0131 kullanabilirsiniz.\n    <\/p>\n<pre><code>\n# curl ile test: (-k veya --insecure, self-signed sertifikalar\u0131 g\u00f6rmezden gelmek i\u00e7indir)\ncurl -k https:\/\/localhost:8080\n\n# openssl s_client ile detayl\u0131 test:\nopenssl s_client -connect localhost:8080\n    <\/pre>\n<p><\/code><\/p>\n<p>\n        <code>openssl s_client<\/code> komutu, TLS\/SSL el s\u0131k\u0131\u015fmas\u0131 hakk\u0131nda \u00e7ok daha detayl\u0131 bilgiler verir. Ba\u011flant\u0131 kuruldu\u011funda, kullan\u0131lan TLS s\u00fcr\u00fcm\u00fc, \u015fifreleme paketi, sertifika zinciri ve sunucu sertifikas\u0131 hakk\u0131nda bilgiler g\u00f6receksiniz. \u00d6zellikle \"Verify return code: 0 (ok)\" veya \"Verify return code: 18 (self signed certificate)\" gibi sat\u0131rlar\u0131 kontrol etmek, sertifika do\u011frulama durumu hakk\u0131nda fikir verir. \"Verify return code: 18\" self-signed sertifikalar i\u00e7in normaldir ve ba\u011flant\u0131n\u0131n teknik olarak g\u00fcvenli oldu\u011funu, ancak sertifikan\u0131n \u00fc\u00e7\u00fcnc\u00fc bir taraf\u00e7a do\u011frulanmad\u0131\u011f\u0131n\u0131 g\u00f6sterir.\n    <\/p>\n<h3>Yayg\u0131n Hatalardan Ka\u00e7\u0131nma Yollar\u0131 ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>\n        OpenSSL entegrasyonu s\u0131ras\u0131nda birka\u00e7 yayg\u0131n hatayla kar\u015f\u0131la\u015fabilirsiniz. Bu hatalar\u0131 bilmek, sorun giderme s\u00fcrecini kolayla\u015ft\u0131r\u0131r:\n    <\/p>\n<ul>\n<li>\n            <strong>Sertifika\/\u00d6zel Anahtar Y\u00fckleme Hatalar\u0131:<\/strong><\/p>\n<p>\n                <code>SSL_CTX_use_certificate_file()<\/code> veya <code>SSL_CTX_use_PrivateKey_file()<\/code> fonksiyonlar\u0131 ba\u015far\u0131s\u0131z olursa, genellikle sertifika veya anahtar dosyalar\u0131n\u0131n bulunamamas\u0131, okunma izinlerinin olmamas\u0131 veya dosya format\u0131n\u0131n yanl\u0131\u015f olmas\u0131 (PEM yerine DER vb.) gibi nedenler vard\u0131r. Dosyalar\u0131n yolunu ve izinlerini kontrol edin. Ayr\u0131ca, <code>ERR_print_errors_fp(stderr)<\/code> \u00e7a\u011fr\u0131s\u0131, OpenSSL'in neden ba\u015far\u0131s\u0131z oldu\u011funu anlaman\u0131za yard\u0131mc\u0131 olacak detayl\u0131 hata mesajlar\u0131 basacakt\u0131r.\n            <\/p>\n<\/li>\n<li>\n            <strong>\u00d6zel Anahtar Uyu\u015fmazl\u0131\u011f\u0131:<\/strong><\/p>\n<p>\n                <code>SSL_CTX_check_private_key()<\/code> fonksiyonu ba\u015far\u0131s\u0131z olursa, sertifikan\u0131z\u0131n ve \u00f6zel anahtar\u0131n\u0131z\u0131n birbiriyle e\u015fle\u015fmedi\u011fi anlam\u0131na gelir. Bu, ya yanl\u0131\u015f anahtar\u0131 y\u00fckledi\u011finiz ya da sertifikay\u0131 olu\u015ftururken yanl\u0131\u015f anahtar\u0131 kulland\u0131\u011f\u0131n\u0131z anlam\u0131na gelebilir. <code>openssl x509 -noout -modulus -in server.crt | openssl md5<\/code> ve <code>openssl rsa -noout -modulus -in server.key | openssl md5<\/code> komutlar\u0131n\u0131 kullanarak her ikisinin de mod\u00fcl hash de\u011ferlerini kar\u015f\u0131la\u015ft\u0131rabilirsiniz. Ayn\u0131 olmalar\u0131 gerekir.\n            <\/p>\n<\/li>\n<li>\n            <strong>SSL El S\u0131k\u0131\u015fma Hatalar\u0131 (<code>SSL_accept()<\/code>):<\/strong><\/p>\n<p>\n                <code>SSL_accept()<\/code> fonksiyonu ba\u015far\u0131s\u0131z olursa, bu genellikle istemci ile sunucu aras\u0131nda TLS\/SSL protokol\u00fc veya \u015fifreleme paketleri \u00fczerinde bir anla\u015fmazl\u0131k oldu\u011fu anlam\u0131na gelir. Desteklenen TLS s\u00fcr\u00fcmlerini (\u00f6rne\u011fin TLSv1.2, TLSv1.3) ve \u015fifreleme paketlerini kontrol edin. Geli\u015ftirme a\u015famas\u0131nda, <code>TLS_server_method()<\/code> kullanmak en geni\u015f uyumlulu\u011fu sa\u011flar. \u00dcretim ortam\u0131nda daha spesifik (\u00f6rn. <code>TLSv1_2_server_method()<\/code>) ve sadece g\u00fc\u00e7l\u00fc \u015fifreleme paketlerini destekleyen y\u00f6ntemler tercih edilmelidir. <code>openssl s_client<\/code> ile sunucuya ba\u011flan\u0131rken verbose mod (-v) kullanmak daha fazla bilgi sa\u011flayabilir.\n            <\/p>\n<\/li>\n<li>\n            <strong>Ba\u011flant\u0131 Sorunlar\u0131 (Port, Firewall):<\/strong><\/p>\n<p>\n                Sunucunuzun belirtilen portta dinledi\u011finden emin olun. <code>netstat -tulnp | grep PORT_NUMARASI<\/code> komutuyla kontrol edebilirsiniz. G\u00fcvenlik duvar\u0131n\u0131z\u0131n (firewall) gelen ba\u011flant\u0131lara izin verdi\u011finden de emin olun.\n            <\/p>\n<\/li>\n<li>\n            <strong>Kaynak S\u0131z\u0131nt\u0131lar\u0131:<\/strong><\/p>\n<p>\n                Her <code>SSL_new()<\/code> \u00e7a\u011fr\u0131s\u0131ndan sonra, <code>SSL_free()<\/code> ile nesneyi serbest b\u0131rakmay\u0131 ve her <code>SSL_CTX_new()<\/code> \u00e7a\u011fr\u0131s\u0131ndan sonra <code>SSL_CTX_free()<\/code> ile ba\u011flam\u0131 serbest b\u0131rakmay\u0131 unutmay\u0131n. Ayr\u0131ca, soketleri <code>close()<\/code> ile kapatmak da \u00f6nemlidir. Bu kaynaklar\u0131n serbest b\u0131rak\u0131lmamas\u0131 bellek s\u0131z\u0131nt\u0131lar\u0131na ve sunucu kararl\u0131l\u0131k sorunlar\u0131na yol a\u00e7abilir.\n            <\/p>\n<\/li>\n<\/ul>\n<p>\n        Bu hata ay\u0131klama ipu\u00e7lar\u0131 ve test stratejileri, OpenSSL tabanl\u0131 HTTP sunucunuzu geli\u015ftirirken kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z sorunlar\u0131 \u00e7\u00f6zmenize yard\u0131mc\u0131 olacakt\u0131r. Unutmay\u0131n, g\u00fcvenlik katman\u0131 eklemek karma\u015f\u0131k olabilir, ancak dikkatli test ve hata ay\u0131klama ile sa\u011flam ve g\u00fcvenilir bir sistem in\u015fa edilebilir.\n    <\/p>\n<h2>Performans ve G\u00fcvenlik \u0130\u00e7in \u0130leri D\u00fczey Optimizasyonlar Nelerdir?<\/h2>\n<p>\n        OpenSSL ile C dilinde temel bir HTTPS sunucusu kurmak harika bir ba\u015flang\u0131\u00e7 noktas\u0131 olsa da, ger\u00e7ek d\u00fcnya uygulamalar\u0131nda performans ve g\u00fcvenlik optimizasyonlar\u0131 kritik \u00f6neme sahiptir. Y\u00fcksek trafikli sunucular i\u00e7in her milisaniye \u00f6nemlidir ve g\u00fcvenlik a\u00e7\u0131klar\u0131 felaketle sonu\u00e7lanabilir. Bu b\u00f6l\u00fcmde, hem sunucunuzun h\u0131z\u0131n\u0131 art\u0131racak hem de daha sa\u011flam bir g\u00fcvenlik duru\u015fu sa\u011flayacak ileri d\u00fczey tekniklere de\u011finece\u011fiz.\n    <\/p>\n<h3>Performans Optimizasyonlar\u0131<\/h3>\n<ul>\n<li>\n            <strong>Oturum \u00d6nbellekleme (Session Caching):<\/strong><\/p>\n<p>\n                TLS\/SSL el s\u0131k\u0131\u015fmas\u0131, i\u015flemci yo\u011fun bir i\u015flemdir. Her yeni ba\u011flant\u0131da bu el s\u0131k\u0131\u015fmas\u0131n\u0131 tekrarlamak performans\u0131 d\u00fc\u015f\u00fcrebilir. Oturum \u00f6nbellekleme, sunucunun daha \u00f6nce kurulan oturumlar\u0131n bilgilerini (oturul kimli\u011fi, kullan\u0131lan \u015fifreleme parametreleri) saklamas\u0131na ve ayn\u0131 istemci tekrar ba\u011fland\u0131\u011f\u0131nda tam bir el s\u0131k\u0131\u015fmas\u0131 yapmadan h\u0131zl\u0131ca oturumu yeniden kurmas\u0131na olanak tan\u0131r. Bu, \u00f6zellikle k\u0131sa \u00f6m\u00fcrl\u00fc ba\u011flant\u0131lar\u0131 olan istemciler i\u00e7in performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. OpenSSL'de <code>SSL_CTX_set_session_cache_mode()<\/code> ve <code>SSL_CTX_set_timeout()<\/code> gibi fonksiyonlarla oturum \u00f6nbellekleme yap\u0131land\u0131r\u0131labilir. \u00d6rne\u011fin:\n            <\/p>\n<pre><code>\n\/\/ Sunucu taraf\u0131nda oturum \u00f6nbelleklemeyi etkinle\u015ftirme\nSSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_SERVER);\nSSL_CTX_set_timeout(ctx, 300); \/\/ Oturumun ge\u00e7erlilik s\u00fcresi 300 saniye (5 dakika)\n            <\/pre>\n<p><\/code>\n        <\/li>\n<li>\n            <strong>TLS 1.3 Kullan\u0131m\u0131:<\/strong><\/p>\n<p>\n                TLS 1.3, TLS protokol\u00fcn\u00fcn en yeni ve en h\u0131zl\u0131 s\u00fcr\u00fcm\u00fcd\u00fcr. Daha az el s\u0131k\u0131\u015fma turu gerektirir (1-RTT veya 0-RTT deste\u011fi ile), bu da ba\u011flant\u0131 kurulum s\u00fcresini k\u0131salt\u0131r. Ayr\u0131ca, eski s\u00fcr\u00fcmlerdeki bilinen bir\u00e7ok g\u00fcvenlik zafiyetini giderir ve daha g\u00fc\u00e7l\u00fc \u015fifreleme algoritmalar\u0131na odaklan\u0131r. M\u00fcmk\u00fcn oldu\u011funca TLS 1.3 kullanmaya \u00f6zen g\u00f6sterin. OpenSSL'de <code>TLS_server_method()<\/code> genellikle en g\u00fcncel desteklenen TLS s\u00fcr\u00fcm\u00fcn\u00fc otomatik olarak se\u00e7er, ancak belirli bir s\u00fcr\u00fcm\u00fc zorlamak i\u00e7in <code>TLSv1_3_server_method()<\/code> gibi fonksiyonlar kullan\u0131labilir.\n            <\/p>\n<\/li>\n<li>\n            <strong>Donan\u0131msal H\u0131zland\u0131rma:<\/strong><\/p>\n<p>\n                Baz\u0131 sunucu donan\u0131mlar\u0131, \u015fifreleme ve \u015fifre \u00e7\u00f6zme i\u015flemlerini h\u0131zland\u0131rmak i\u00e7in \u00f6zel \u00e7ipler (\u00f6rne\u011fin Intel AES-NI) i\u00e7erir. OpenSSL, bu donan\u0131msal h\u0131zland\u0131r\u0131c\u0131lardan faydalanacak \u015fekilde yap\u0131land\u0131r\u0131labilir. Bu, \u00f6zellikle y\u00fcksek i\u015flemci y\u00fck\u00fc alt\u0131nda \u00e7al\u0131\u015fan sunucular i\u00e7in b\u00fcy\u00fck bir performans kazanc\u0131 sa\u011flayabilir.\n            <\/p>\n<\/li>\n<li>\n            <strong>\u00c7oklu \u0130\u015f Par\u00e7ac\u0131\u011f\u0131\/S\u00fcre\u00e7 Mimarisi:<\/strong><\/p>\n<p>\n                Tek bir d\u00f6ng\u00fcde ba\u011flant\u0131lar\u0131 s\u0131rayla i\u015flemek, sunucunuzun yaln\u0131zca tek bir istemciye hizmet verebildi\u011fi anlam\u0131na gelir. Y\u00fcksek performans i\u00e7in, her yeni ba\u011flant\u0131y\u0131 ayr\u0131 bir i\u015f par\u00e7ac\u0131\u011f\u0131na (thread) veya s\u00fcrece (process) devretmek \u00f6nemlidir. Bu, sunucunuzun ayn\u0131 anda birden fazla istemciye hizmet vermesini sa\u011flar ve OpenSSL i\u015flemlerinin paralelle\u015ftirilmesine olanak tan\u0131r. <code>pthread<\/code> k\u00fct\u00fcphanesi veya <code>fork()<\/code> sistem \u00e7a\u011fr\u0131s\u0131 bu ama\u00e7la kullan\u0131labilir. Ancak, OpenSSL'in i\u015f par\u00e7ac\u0131\u011f\u0131 g\u00fcvenli\u011fi (thread-safety) konular\u0131na dikkat etmek ve uygun kilit mekanizmalar\u0131n\u0131 kullanmak gerekir.\n            <\/p>\n<\/li>\n<\/ul>\n<h3>G\u00fcvenlik Optimizasyonlar\u0131<\/h3>\n<ul>\n<li>\n            <strong>Zay\u0131f \u015eifreleme Paketlerini Devre D\u0131\u015f\u0131 B\u0131rakma:<\/strong><\/p>\n<p>\n                OpenSSL, varsay\u0131lan olarak bir\u00e7ok \u015fifreleme paketini destekler. Ancak baz\u0131 eski veya zay\u0131f \u015fifreleme paketleri g\u00fcvenlik a\u00e7\u0131klar\u0131 bar\u0131nd\u0131rabilir. Sunucunuzu yaln\u0131zca g\u00fc\u00e7l\u00fc ve modern \u015fifreleme paketlerini kullanacak \u015fekilde yap\u0131land\u0131rmal\u0131s\u0131n\u0131z. <code>SSL_CTX_set_cipher_list()<\/code> fonksiyonu ile hangi \u015fifreleme paketlerinin kullan\u0131laca\u011f\u0131n\u0131 belirleyebilirsiniz. \u00d6rne\u011fin:\n            <\/p>\n<pre><code>\n\/\/ Yaln\u0131zca g\u00fc\u00e7l\u00fc \u015fifreleme paketlerini ve TLS 1.2\/1.3'\u00fc zorlama\nSSL_CTX_set_cipher_list(ctx, \"TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:HIGH:!aNULL:!MD5:!RC4\");\nSSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION); \/\/ Minimum TLS 1.2 s\u00fcr\u00fcm\u00fcn\u00fc kullan\n            <\/pre>\n<p><\/code>\n        <\/li>\n<li>\n            <strong>HSTS (HTTP Strict Transport Security):<\/strong><\/p>\n<p>\n                HSTS, sunucunuzun taray\u0131c\u0131lara sadece HTTPS \u00fczerinden ba\u011flant\u0131 kurmalar\u0131 gerekti\u011fini bildiren bir web g\u00fcvenlik politikas\u0131 mekanizmas\u0131d\u0131r. Bu, taray\u0131c\u0131lar\u0131n HTTP'den HTTPS'e otomatik y\u00f6nlendirme yapmas\u0131n\u0131 ve potansiyel olarak g\u00fcvensiz HTTP isteklerini engellemesini sa\u011flar. HSTS bir HTTP yan\u0131t ba\u015fl\u0131\u011f\u0131 olarak g\u00f6nderilir ve sunucu taraf\u0131nda HTTP ba\u015fl\u0131klar\u0131na eklenerek uygulan\u0131r.\n            <\/p>\n<pre><code>\n\/\/ HTTP yan\u0131t ba\u015fl\u0131\u011f\u0131na HSTS ekleme \u00f6rne\u011fi (C kodunda manuel olarak eklenmeli)\n\/\/ \"Strict-Transport-Security: max-age=31536000; includeSubDomains; preload\"\n            <\/pre>\n<p><\/code>\n        <\/li>\n<li>\n            <strong>OCSP Stapling (Online Certificate Status Protocol Stapling):<\/strong><\/p>\n<p>\n                OCSP Stapling, sunucunuzun kendi sertifikas\u0131n\u0131n ge\u00e7erlilik durumunu bir CA'dan al\u0131p, TLS el s\u0131k\u0131\u015fmas\u0131 s\u0131ras\u0131nda istemcilere sunmas\u0131d\u0131r. Bu, istemcilerin CA ile ayr\u0131 bir ba\u011flant\u0131 kurarak sertifikan\u0131n iptal edilip edilmedi\u011fini kontrol etme ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r. Hem performans hem de gizlilik a\u00e7\u0131s\u0131ndan faydal\u0131d\u0131r. OpenSSL'de bu \u00f6zelli\u011fi etkinle\u015ftirmek i\u00e7in <code>SSL_CTX_set_tlsext_status_cb()<\/code> gibi fonksiyonlar kullan\u0131l\u0131r, ancak uygulanmas\u0131 biraz daha karma\u015f\u0131kt\u0131r.\n            <\/p>\n<\/li>\n<li>\n            <strong>G\u00fcvenli K\u00fct\u00fcphane Kullan\u0131m\u0131 ve G\u00fcncelleme:<\/strong><\/p>\n<p>\n                Her zaman OpenSSL'in en g\u00fcncel ve kararl\u0131 s\u00fcr\u00fcm\u00fcn\u00fc kullan\u0131n. G\u00fcvenlik a\u00e7\u0131klar\u0131 s\u00fcrekli ke\u015ffedilir ve yamalar yay\u0131nlan\u0131r. K\u00fct\u00fcphanenizi d\u00fczenli olarak g\u00fcncellemek, bilinen zafiyetlere kar\u015f\u0131 korunman\u0131n en iyi yollar\u0131ndan biridir.\n            <\/p>\n<\/li>\n<\/ul>\n<p>\n        Bu ileri d\u00fczey optimizasyonlar, C dilinde OpenSSL ile geli\u015ftirilen HTTPS sunucunuzu hem daha h\u0131zl\u0131 hem de daha g\u00fcvenli hale getirecektir. Her bir optimizasyonun kendi karma\u015f\u0131kl\u0131\u011f\u0131 vard\u0131r, bu y\u00fczden bunlar\u0131 ad\u0131m ad\u0131m ve dikkatlice uygulaman\u0131z \u00f6nemlidir. \u00d6zellikle \u00fcretim ortamlar\u0131nda, bu t\u00fcr detaylara dikkat etmek, uygulaman\u0131z\u0131n ba\u015far\u0131s\u0131 ve kullan\u0131c\u0131lar\u0131n\u0131z\u0131n g\u00fcvenli\u011fi i\u00e7in hayati \u00f6neme sahiptir.\n    <\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>\n        Bu makalede, OpenSSL k\u00fct\u00fcphanesini kullanarak C dilinde basit bir HTTP sunucusunu nas\u0131l g\u00fcvenli bir HTTPS sunucusuna d\u00f6n\u00fc\u015ft\u00fcrebilece\u011fimizi detayl\u0131ca inceledik. Ba\u015flang\u0131\u00e7ta HTTP'nin neden g\u00fcvensiz oldu\u011funu ve TLS\/SSL'in bu a\u00e7\u0131\u011f\u0131 nas\u0131l kapatt\u0131\u011f\u0131n\u0131 kavrad\u0131k. Ard\u0131ndan, OpenSSL ile kendi kendine imzal\u0131 sertifikalar ve \u00f6zel anahtarlar olu\u015fturma ad\u0131mlar\u0131n\u0131 \u00f6\u011frendik. En \u00f6nemlisi, C dilindeki sunucu kodumuza OpenSSL k\u00fct\u00fcphanesini entegre ederek, soket ileti\u015fimini nas\u0131l \u015fifreleyebilece\u011fimizi ad\u0131m ad\u0131m uygulad\u0131k. G\u00fcvenli ileti\u015fim kurma s\u00fcrecini test etmenin yollar\u0131n\u0131 ve yayg\u0131n hatalar\u0131 nas\u0131l giderebilece\u011fimizi de ele ald\u0131k. Son olarak, sunucumuzun performans\u0131n\u0131 art\u0131rmak ve g\u00fcvenli\u011fini sa\u011flamla\u015ft\u0131rmak i\u00e7in oturum \u00f6nbellekleme, TLS 1.3 kullan\u0131m\u0131, zay\u0131f \u015fifreleme paketlerini devre d\u0131\u015f\u0131 b\u0131rakma gibi ileri d\u00fczey optimizasyonlara de\u011findik.\n    <\/p>\n<p>\n        Bu s\u00fcre\u00e7, C dilinin d\u00fc\u015f\u00fck seviye kontrol\u00fcyle OpenSSL'in g\u00fc\u00e7l\u00fc kriptografik yeteneklerini birle\u015ftirerek, son derece sa\u011flam ve \u00f6zelle\u015ftirilebilir bir HTTPS sunucusu olu\u015fturman\u0131za olanak tan\u0131r. Elbette, bu sadece bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Ger\u00e7ek d\u00fcnya uygulamalar\u0131nda hata y\u00f6netimi, \u00e7oklu i\u015f par\u00e7ac\u0131\u011f\u0131\/s\u00fcre\u00e7 deste\u011fi, dinamik i\u00e7erik sunumu ve daha geli\u015fmi\u015f g\u00fcvenlik \u00f6nlemleri gibi konular\u0131 da dikkate alman\u0131z gerekecektir. Ancak, burada edindi\u011finiz bilgi ve deneyim, daha karma\u015f\u0131k ve g\u00fcvenli a\u011f uygulamalar\u0131 geli\u015ftirmenizin temelini olu\u015fturacakt\u0131r. Unutmay\u0131n, siber g\u00fcvenlik s\u00fcrekli bir s\u00fcre\u00e7tir ve uygulamalar\u0131n\u0131z\u0131 d\u00fczenli olarak g\u00f6zden ge\u00e7irmek, g\u00fcncel tehditlere kar\u015f\u0131 korumak hayati \u00f6nem ta\u015f\u0131r.\n    <\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<dl>\n<dt>OpenSSL ile self-signed sertifika kullanmak \u00fcretim ortam\u0131nda g\u00fcvenli midir?<\/dt>\n<dd>\n            Hay\u0131r, \u00fcretim ortam\u0131nda self-signed sertifika kullanmak g\u00fcvenli de\u011fildir. Taray\u0131c\u0131lar ve i\u015fletim sistemleri bu sertifikalar\u0131 tan\u0131maz ve kullan\u0131c\u0131lara \"g\u00fcvenli de\u011fil\" uyar\u0131s\u0131 verir. Bu durum, sitenize olan g\u00fcveni zedeler ve kullan\u0131c\u0131lar\u0131n sitenizden uzakla\u015fmas\u0131na neden olabilir. \u00dcretim ortamlar\u0131 i\u00e7in Let's Encrypt gibi \u00fccretsiz veya ticari bir Sertifika Yetkilisinden (CA) al\u0131nm\u0131\u015f, g\u00fcvenilir bir sertifika kullanman\u0131z \u015fiddetle tavsiye edilir. Self-signed sertifikalar sadece geli\u015ftirme ve test ama\u00e7l\u0131d\u0131r.\n        <\/dd>\n<dt>OpenSSL entegrasyonu sunucu performans\u0131n\u0131 nas\u0131l etkiler?<\/dt>\n<dd>\n            OpenSSL entegrasyonu, \u00f6zellikle TLS\/SSL el s\u0131k\u0131\u015fmas\u0131 ve veri \u015fifreleme\/\u015fifre \u00e7\u00f6zme i\u015flemleri nedeniyle sunucu \u00fczerinde bir miktar i\u015flemci y\u00fck\u00fc olu\u015fturur. Bu, \u015fifresiz HTTP'ye k\u0131yasla performansta k\u00fc\u00e7\u00fck bir d\u00fc\u015f\u00fc\u015fe neden olabilir. Ancak, modern i\u015flemcilerdeki donan\u0131msal \u015fifreleme h\u0131zland\u0131rmalar\u0131 (\u00f6rne\u011fin AES-NI) ve TLS 1.3 gibi daha verimli protokoller sayesinde bu etki genellikle kabul edilebilir d\u00fczeydedir. Oturum \u00f6nbellekleme gibi optimizasyon teknikleri de performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. G\u00fcvenlik i\u00e7in \u00f6denen bu k\u00fc\u00e7\u00fck performans bedeli, genellikle buna de\u011ferdir.\n        <\/dd>\n<dt>Hangi TLS s\u00fcr\u00fcm\u00fcn\u00fc kullanmal\u0131y\u0131m ve neden?<\/dt>\n<dd>\n            M\u00fcmk\u00fcnse her zaman TLS 1.3 kullanmal\u0131s\u0131n\u0131z. TLS 1.3, protokol\u00fcn en son s\u00fcr\u00fcm\u00fcd\u00fcr ve \u00f6nceki s\u00fcr\u00fcmlere g\u00f6re daha h\u0131zl\u0131, daha g\u00fcvenli ve daha sade bir yap\u0131ya sahiptir. Eski ve zay\u0131f \u015fifreleme algoritmalar\u0131n\u0131 ve \u00f6zellikleri kald\u0131rarak g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 azalt\u0131r. E\u011fer TLS 1.3 deste\u011fi m\u00fcmk\u00fcn de\u011filse, en az TLS 1.2 kullanmal\u0131s\u0131n\u0131z. TLS 1.0 ve TLS 1.1 s\u00fcr\u00fcmleri art\u0131k g\u00fcvenli kabul edilmemekte ve \u00e7o\u011fu taray\u0131c\u0131 taraf\u0131ndan destekleri sonland\u0131r\u0131lmaktad\u0131r.\n        <\/dd>\n<dt>C dilinde OpenSSL kullan\u0131rken bellek y\u00f6netimine neden dikkat etmeliyim?<\/dt>\n<dd>\n            C dilinde manuel bellek y\u00f6netimi nedeniyle, OpenSSL nesnelerini do\u011fru bir \u015fekilde serbest b\u0131rakmak (\u00f6rne\u011fin <code>SSL_CTX_free()<\/code> ve <code>SSL_free()<\/code> ile) hayati \u00f6nem ta\u015f\u0131r. Bu nesneler bellekte yer kaplar ve e\u011fer serbest b\u0131rak\u0131lmazsa \"bellek s\u0131z\u0131nt\u0131lar\u0131na\" yol a\u00e7ar. Bellek s\u0131z\u0131nt\u0131lar\u0131, sunucunuzun zamanla daha fazla bellek t\u00fcketmesine ve sonunda karars\u0131z hale gelmesine veya \u00e7\u00f6kmesine neden olabilir. Her kaynak tahsis etti\u011finizde (<code>SSL_CTX_new()<\/code>, <code>SSL_new()<\/code>), ona kar\u015f\u0131l\u0131k gelen bir serbest b\u0131rakma fonksiyonunu \u00e7a\u011f\u0131rd\u0131\u011f\u0131n\u0131zdan emin olmal\u0131s\u0131n\u0131z.\n        <\/dd>\n<dt>Uygulamam\u0131n mobil cihazlarla uyumlu oldu\u011fundan nas\u0131l emin olabilirim?<\/dt>\n<dd>\n            Sunucunuzun mobil cihazlarla uyumlu olmas\u0131 genellikle sunulan i\u00e7eri\u011fin ve kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcn mobil uyumlu tasarlanmas\u0131yla ilgilidir. G\u00fcvenli HTTPS ba\u011flant\u0131s\u0131 kurmak, mobil cihazlar\u0131n da bu i\u00e7eri\u011fe g\u00fcvenle eri\u015fmesini sa\u011flar. \u00d6zellikle CSS media query'ler kullanarak responsif bir tasar\u0131m geli\u015ftirebilirsiniz. Sunucunuzun kendisi, sadece i\u00e7eri\u011fi do\u011fru \u015fekilde sunar. Mobil uyumlu bir aray\u00fcz i\u00e7in genellikle HTML ve CSS taraf\u0131nda \u00e7al\u0131\u015fmalar yap\u0131l\u0131r. \u00d6rne\u011fin, sunucunuzun g\u00f6nderdi\u011fi bir HTML sayfas\u0131nda \u015f\u00f6yle bir CSS blo\u011fu bulunabilir:<\/p>\n<pre><code>\n<style>\n  body {\n    font-family: Arial, sans-serif;\n  }\n  .container {\n    width: 90%;\n    margin: 0 auto;\n    padding: 20px;\n  }\n  @media (max-width: 768px) {\n    .container {\n      width: 100%;\n      padding: 10px;\n    }\n    h2 {\n      font-size: 1.5em;\n    }\n  }\n<\/style>\n            <\/pre>\n<p><\/code><br \/>\n            Bu \u00f6rnek, 768 pikselden daha k\u00fc\u00e7\u00fck ekranlarda (<code>max-width: 768px<\/code>) <code>.container<\/code> s\u0131n\u0131f\u0131na sahip \u00f6\u011felerin geni\u015fli\u011fini %100'e ayarlarken, ba\u015fl\u0131k (<code>h2<\/code>) boyutunu k\u00fc\u00e7\u00fclt\u00fcr. Sunucunuz, bu tarz mobil uyumlu CSS'i istemciye g\u00f6ndererek, istemcinin (taray\u0131c\u0131 veya mobil uygulama) ekran boyutuna g\u00f6re i\u00e7eri\u011fi d\u00fczenlemesini sa\u011flar.\n        <\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"HTTP sunucunuzdaki hassas verilerinizi g\u00fcvende tutmak ister misiniz? G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131 verilerinin gizlili\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, bir web&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[874],"tags":[],"class_list":{"0":"post-31880","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-server","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>OpenSSL ile C Dilinde HTTP Sunucusunu \u015eifreleme<\/title>\n<meta name=\"description\" content=\"HTTP sunucunuzdaki hassas verilerinizi g\u00fcvende tutmak ister misiniz? G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131 verilerinin gizlili\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, bir web uygulamas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Bu makalede, OpenSSL k\u00fct\u00fcphanesini kullanarak C dilinde geli\u015ftirdi\u011finiz HTTP sunucunuzu nas\u0131l g\u00fcvenli bir HTTPS sunucusuna d\u00f6n\u00fc\u015ft\u00fcrece\u011finizi ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OpenSSL ile C Dilinde HTTP Sunucusunu \u015eifreleme\" \/>\n<meta property=\"og:description\" content=\"HTTP sunucunuzdaki hassas verilerinizi g\u00fcvende tutmak ister misiniz? G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131 verilerinin gizlili\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, bir web uygulamas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Bu makalede, OpenSSL k\u00fct\u00fcphanesini kullanarak C dilinde geli\u015ftirdi\u011finiz HTTP sunucunuzu nas\u0131l g\u00fcvenli bir HTTPS sunucusuna d\u00f6n\u00fc\u015ft\u00fcrece\u011finizi ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-15T02:01:40+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"OpenSSL ile C Dilinde HTTP Sunucusunu \u015eifreleme\",\"datePublished\":\"2025-10-15T02:01:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/\"},\"wordCount\":5417,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Server\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/\",\"name\":\"OpenSSL ile C Dilinde HTTP Sunucusunu \u015eifreleme\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-15T02:01:40+00:00\",\"description\":\"HTTP sunucunuzdaki hassas verilerinizi g\u00fcvende tutmak ister misiniz? G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131 verilerinin gizlili\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, bir web uygulamas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Bu makalede, OpenSSL k\u00fct\u00fcphanesini kullanarak C dilinde geli\u015ftirdi\u011finiz HTTP sunucunuzu nas\u0131l g\u00fcvenli bir HTTPS sunucusuna d\u00f6n\u00fc\u015ft\u00fcrece\u011finizi ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OpenSSL ile C Dilinde HTTP Sunucusunu \u015eifreleme\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"OpenSSL ile C Dilinde HTTP Sunucusunu \u015eifreleme","description":"HTTP sunucunuzdaki hassas verilerinizi g\u00fcvende tutmak ister misiniz? G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131 verilerinin gizlili\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, bir web uygulamas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Bu makalede, OpenSSL k\u00fct\u00fcphanesini kullanarak C dilinde geli\u015ftirdi\u011finiz HTTP sunucunuzu nas\u0131l g\u00fcvenli bir HTTPS sunucusuna d\u00f6n\u00fc\u015ft\u00fcrece\u011finizi ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/","og_locale":"tr_TR","og_type":"article","og_title":"OpenSSL ile C Dilinde HTTP Sunucusunu \u015eifreleme","og_description":"HTTP sunucunuzdaki hassas verilerinizi g\u00fcvende tutmak ister misiniz? G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131 verilerinin gizlili\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, bir web uygulamas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Bu makalede, OpenSSL k\u00fct\u00fcphanesini kullanarak C dilinde geli\u015ftirdi\u011finiz HTTP sunucunuzu nas\u0131l g\u00fcvenli bir HTTPS sunucusuna d\u00f6n\u00fc\u015ft\u00fcrece\u011finizi ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.","og_url":"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-15T02:01:40+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"OpenSSL ile C Dilinde HTTP Sunucusunu \u015eifreleme","datePublished":"2025-10-15T02:01:40+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/"},"wordCount":5417,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Server"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/","url":"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/","name":"OpenSSL ile C Dilinde HTTP Sunucusunu \u015eifreleme","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-15T02:01:40+00:00","description":"HTTP sunucunuzdaki hassas verilerinizi g\u00fcvende tutmak ister misiniz? G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131 verilerinin gizlili\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, bir web uygulamas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Bu makalede, OpenSSL k\u00fct\u00fcphanesini kullanarak C dilinde geli\u015ftirdi\u011finiz HTTP sunucunuzu nas\u0131l g\u00fcvenli bir HTTPS sunucusuna d\u00f6n\u00fc\u015ft\u00fcrece\u011finizi ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/openssl-ile-c-dilinde-http-sunucusunu-sifreleme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"OpenSSL ile C Dilinde HTTP Sunucusunu \u015eifreleme"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31880"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31880\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31880"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31880"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}