នៅពេលអ្នករុញមួយ commit, របស់អ្នក CI/CD pipeline ដំណើរការ ការធ្វើតេស្តឆ្លងកាត់ ហើយការដាក់ពង្រាយគឺគ្រាន់តែចុចមួយដងប៉ុណ្ណោះ។ បន្ទាប់មកភ្លាមៗនោះ ការបង្កើតរបស់អ្នកបរាជ័យជាមួយនឹងសារ TLS ដ៏អាថ៌កំបាំងមួយ។
គ្មានការផ្លាស់ប្តូរលេខកូដដែលត្រូវស្តីបន្ទោសទេ ប៉ុន្តែ pipeline គឺក្រហម។ មានអ្វីកើតឡើង? សម្រាប់ក្រុមជាច្រើន ជារឿយៗមូលហេតុគឺបញ្ហាសុវត្ថិភាព TLS ដូចជាវិញ្ញាបនបត្រផុតកំណត់ លេខកូដសម្ងាត់ខ្សោយ ឬម៉ាស៊ីនមេដែលត្រូវបានកំណត់រចនាសម្ព័ន្ធមិនត្រឹមត្រូវ។ ដំណឹងល្អ? បញ្ហាទាំងនេះងាយស្រួលរកឃើញមុនពេលវាធ្វើឱ្យខូចការបង្កើតរបស់អ្នក ប្រសិនបើអ្នកដឹងពីរបៀបប្រើ... កម្មវិធី OpenSSL s_client.
អត្ថបទនេះនឹងណែនាំអ្នកអំពីការធ្វើរោគវិនិច្ឆ័យ និងការទប់ស្កាត់កំហុស SSL CI/CD pipelineប្រើ openssl s_clientយើងនឹងគ្របដណ្តប់លើឧទាហរណ៍ជាក់ស្តែង បច្ចេកទេសស្វ័យប្រវត្តិកម្ម និង guardrails ដែលរក្សាការដាក់ពង្រាយរបស់អ្នកឱ្យមានសុវត្ថិភាព។
នៅពេលរបស់អ្នក Pipeline ស្រែក៖ ការបរាជ័យ TLS ពិតប្រាកដ
ខាងក្រោមនេះជាទិដ្ឋភាពដែលធ្លាប់ស្គាល់សម្រាប់វិស្វករ DevOps ជាច្រើន៖
bash
$ openssl s_client -connect example.com:443
CONNECTED(00000003)
depth=0 CN = example.com
Verify error:num=10:certificate has expired
ថា កំហុស SSL មានន័យថាវិញ្ញាបនបត្ររបស់ចំណុចបញ្ចប់ផុតកំណត់ហើយ។ In CI/CDវាបញ្ឈប់ការដាក់ពង្រាយ បំបែកការធ្វើតេស្តសមាហរណកម្ម និងអាចរារាំងការចេញផ្សាយទាំងមូលរបស់អ្នក។
អ្វីដែលអាក្រក់ជាងនេះទៅទៀត ប្រសិនបើមិនអើពើ គម្លាតសុវត្ថិភាព TLS ដូចគ្នានេះអាចធ្វើឱ្យប្រព័ន្ធផលិតកម្មប្រឈមនឹងការវាយប្រហារដោយមនុស្សនៅកណ្តាល ឬបណ្តាលឱ្យមានការផ្អាកសេវាកម្ម។
ហេតុអ្វីបានជា OpenSSL s_client ជាកាំបិតបំបាត់កំហុស TLS របស់អ្នកអភិវឌ្ឍន៍
មិនដូចការព្រមានរបស់កម្មវិធីរុករកតាមអ៊ីនធឺណិត ដែលមិនច្បាស់លាស់ និងដោយដៃទេ s_client របស់ OpenSSL ផ្តល់នូវទិដ្ឋភាពឆៅ និងលម្អិតនៃការចាប់ដៃ TLS។
វាល្អសម្រាប់៖
- កំពុងពិនិត្យមើលកំណែ TLS និងលេខកូដដែលចំណុចបញ្ចប់ប្រើ
- ការផ្ទៀងផ្ទាត់ថាវិញ្ញាបនបត្រមានសុពលភាព និងគួរឱ្យទុកចិត្ត
- ការបំបាត់កំហុសការតភ្ជាប់ដោយផ្ទាល់នៅក្នុង CI/CD ការងារ
ឧទាហរណ៍នៃការត្រួតពិនិត្យការចាប់ដៃ៖
bash
openssl s_client -connect service.internal:443 -servername service.internal -tls1_2
អ្នកទទួលបានភាពមើលឃើញភ្លាមៗអំពីព័ត៌មានលម្អិតអំពីវិញ្ញាបនបត្រ លេខកូដសម្ងាត់ដែលគាំទ្រ និងកំហុស SSL ណាមួយក្នុងអំឡុងពេលចរចា។ នោះហើយជាមូលហេតុដែលក្រុម DevSecOps ជាច្រើនចាត់ទុកវាថាជាឧបករណ៍សុវត្ថិភាព TLS ដ៏ពេញនិយម។
កំហុស TLS/SSL ទូទៅដែលធ្វើឲ្យខូច CI Pipelines
ចូរយើងវិភាគការបរាជ័យដែលទំនងជាលេចឡើងក្នុង CI/CD, ជាមួយនឹងឧទាហរណ៍ខ្លីៗ និងផលប៉ះពាល់។
1 វិញ្ញាបនបត្រផុតកំណត់ ឬមិនទាន់មានសុពលភាព
bash
$ openssl s_client -connect example.com:443
Verify error:num=10:certificate has expired
ផលប៉ះពាល់: ការធ្វើតេស្តដោយស្វ័យប្រវត្តិបរាជ័យ នៅពេលដែលការពឹងផ្អែកប្រើប្រាស់វិញ្ញាបនបត្រហួសសម័យ។ នៅក្នុងស្ថាបត្យកម្មមីក្រូសេវាកម្ម វិញ្ញាបនបត្រដែលផុតកំណត់មួយនៅក្នុងសេវាកម្មខាងក្នុងអាចបញ្ឈប់ខ្សែសង្វាក់ដាក់ពង្រាយទាំងមូល។
2 កូដសម្ងាត់ខ្សោយ ឬពិធីការដែលលែងប្រើ
bash
openssl s_client -connect app.dev:443 -cipher LOW
ផលប៉ះពាល់: ច្រកទ្វារសុវត្ថិភាពបរាជ័យ នៅពេលដែលសេវាកម្មគាំទ្រ TLS 1.0/1.1 ឬលេខកូដខ្សោយ។ ជារឿយៗវាលេចឡើងក្នុងអំឡុងពេលស្កេនអនុលោមភាពនៅក្នុងបរិស្ថានដែលមានការគ្រប់គ្រង។
៣ ភាពមិនត្រូវគ្នានៃឈ្មោះម៉ាស៊ីន និងវិញ្ញាបនបត្រដែលចុះហត្ថលេខាដោយខ្លួនឯង
ឧទាហរណ៍៖ សេវាកម្មរៀបចំផ្ទៃក្នុងប្រើប្រាស់វិញ្ញាបនបត្រដែលចេញសម្រាប់ សេវាកម្ម.ក្នុងស្រុកប៉ុន្ដែ pipeline ការហៅ service.devម្យ៉ាងវិញទៀត វិញ្ញាបនបត្រអាចត្រូវបានចុះហត្ថលេខាដោយខ្លួនឯង ហើយមិនត្រូវបានទុកចិត្តដោយហាងទុកចិត្តរបស់អ្នករត់នោះទេ។
ផលប៉ះពាល់: ការផ្ទៀងផ្ទាត់ការចាប់ដៃបរាជ័យ លុះត្រាតែវាត្រូវបានរំលងយ៉ាងច្បាស់លាស់ ដែលមានគ្រោះថ្នាក់ក្នុងការផលិត។ នេះជារឿងធម្មតានៅក្នុងការហៅ API ខាងក្នុង ការដំឡើងការធ្វើតេស្តក្នុងស្រុក ឬបរិស្ថានអភិវឌ្ឍន៍ដែលត្រូវបានកំណត់រចនាសម្ព័ន្ធមិនត្រឹមត្រូវ។
ខ្សែសង្វាក់វិញ្ញាបនបត្រមិនពេញលេញចំនួន ៤
ឧទាហរណ៍៖ វិញ្ញាបនបត្ររៀបចំដំណាក់កាលបាត់ CA កម្រិតមធ្យម។
ផលប៉ះពាល់: កម្មវិធីរត់ដែលមានហាងទុកចិត្តតឹងរ៉ឹងជាងនឹងបរាជ័យក្នុងការតភ្ជាប់ ដែលបណ្តាលឱ្យមានការបរាជ័យក្នុងការសាងសង់មិនទៀងទាត់។
ចង់ចូលជ្រៅជាងនេះ CI/CD ការគំរាមកំហែង?
CI/CD pipelineដើរតួនាទីយ៉ាងសំខាន់ក្នុងការសម្រួលដល់ការអភិវឌ្ឍកម្មវិធីដែលសម្រួល។ យ៉ាងណាក៏ដោយ ដោយសារទាំងនេះ pipelineកាន់តែមានសារៈសំខាន់ខ្លាំងឡើងៗ ភាពចាំបាច់ក្នុងការការពារពួកវាពីភាពងាយរងគ្រោះកាន់តែលេចធ្លោឡើង។ ស្វែងយល់ពីការស៊ើបអង្កេតស៊ីជម្រៅដែលផ្តោតលើការដោះស្រាយហានិភ័យលេចធ្លោមួយដែលត្រូវបានកំណត់នៅក្នុង OWASP Top-10 CI/CD ហានិភ័យសន្តិសុខ!
ការធ្វើរោគវិនិច្ឆ័យការបរាជ័យ TLS នៅក្នុង CI/CD ជាមួយ OpenSSL s_client
ជំហានដំបូង៖ ធ្វើការបរាជ័យឡើងវិញនៅក្នុងរបស់អ្នក CI/CD បរិស្ថាន។
yaml
- name: Check TLS
run: |
openssl s_client -connect api.prod:443 -servername api.prod
វាផ្តល់ឱ្យអ្នកនូវប្រតិចារិក TLS handshake ពេញលេញ ពិធីការ លេខសម្ងាត់ ខ្សែសង្វាក់វិញ្ញាបនបត្រ និងកំហុសសុពលភាពណាមួយ។
រកមើល:
- ផ្ទៀងផ្ទាត់កំហុស សារ
- កំណែពិធីការ TLS ចាស់ៗ
- សារធាតុផ្សំដែលបាត់ក្នុងខ្សែសង្វាក់
ការផ្លាស់ប្តូរទៅស្វ័យប្រវត្តិកម្ម៖
នៅពេលដែលអ្នកអាចញែកមូលហេតុដើមបាន ជំហានបន្ទាប់គឺធ្វើឱ្យការត្រួតពិនិត្យទាំងនេះដោយស្វ័យប្រវត្តិ។ ការធ្វើរោគវិនិច្ឆ័យដោយដៃគឺល្អម្តង ប៉ុន្តែបើគ្មានស្វ័យប្រវត្តិទេ អ្នកនឹងឃើញដូចគ្នា។ កំហុស SSL នៅផ្សេងទៀត pipeline សប្តាហ៍ក្រោយ។
ការធ្វើស្វ័យប្រវត្តិកម្មការត្រួតពិនិត្យ TLS ជាសុវត្ថិភាព Guardrails
អ្នកអាចបង្កប់ការត្រួតពិនិត្យ TLS ទៅក្នុងរបស់អ្នក CI/CD ដូច្នេះការកំណត់រចនាសម្ព័ន្ធមិនល្អបរាជ័យមុនអាយុ៖
- ជូនដំណឹងប្រសិនបើវិញ្ញាបនបត្រផុតកំណត់ក្នុងរយៈពេលតិចជាង 30 ថ្ងៃ
- រារាំងលេខកូដខ្សោយ និងកំណែ TLS ដែលលែងប្រើ
- តម្រូវឱ្យមានខ្សែសង្វាក់វិញ្ញាបនបត្រពេញលេញ
ឧទាហរណ៍របងការពារ៖
bash
if openssl s_client -connect $HOST:$PORT /dev/null | grep -q "Protocol : TLSv1"; then
echo "❌ Weak protocol detected"
exit 1
fi
គន្លឹះ៖ ដំណើរការវានៅដំណាក់កាលមុនពេលដាក់ពង្រាយ ដើម្បីឱ្យអ្នកចាប់បញ្ហាមុនពេលបញ្ចូលកូដ។
ការទប់ស្កាត់ការភ្ញាក់ផ្អើល TLS នៅក្នុងផលិតកម្ម
បញ្ហា TLS មិនត្រឹមតែកើតឡើងក្នុងអំឡុងពេលដាក់ពង្រាយនោះទេ។ វិញ្ញាបនបត្រផុតកំណត់នៅពេលណាក៏បាន។ នោះហើយជាមូលហេតុដែលការត្រួតពិនិត្យជាបន្តបន្ទាប់គឺ... សំខាន់នៅក្នុង DevSecOps។
ឧទាហរណ៍នៃការត្រួតពិនិត្យតាមកាលវិភាគជាមួយ GitHub Actions៖
yaml
name: TLS Monitor
on:
schedule:
- cron: "0 6 * * *"
jobs:
check-tls:
runs-on: ubuntu-latest
steps:
- name: Check TLS expiration
run: |
EXP_DATE=$(echo | openssl s_client -connect example.com:443 2>/dev/null \
| openssl x509 -noout -enddate | cut -d= -f2)
echo "Certificate expires on: $EXP_DATE"
អ្នកអាចសម្របវាទៅនឹងការងារ cron, Jenkins ឬ Kubernetes CronJobs ដើម្បីស្កេនចំណុចបញ្ចប់ជាបន្តបន្ទាប់សម្រាប់បញ្ហាសុវត្ថិភាព TLS។
ហានិភ័យ AppSec ពិតប្រាកដពី TLS ដែលខូច
ការកំណត់រចនាសម្ព័ន្ធ TLS ដែលខូចមិនមែនគ្រាន់តែជាបញ្ហាបង្កើតនោះទេ។ ពួកវាជាកាតព្វកិច្ចសុវត្ថិភាព៖
- ការវាយប្រហាររបស់ MITM ប្រសិនបើការអ៊ិនគ្រីបខ្សោយ ឬបាត់
- បន្ទាបការវាយប្រហារ ប្រសិនបើពិធីការចាស់ៗត្រូវបានអនុញ្ញាត
- ហានិភ័យនៃខ្សែសង្វាក់ផ្គត់ផ្គង់ ប្រសិនបើការទាញយកកញ្ចប់កើតឡើងលើការតភ្ជាប់ដែលមិនមានសុវត្ថិភាព
ដាក់វាទាំងអស់រួមគ្នាជាមួយ Guardrails
សូមគិតអំពីដំណើរការនេះដូចខាងក្រោម៖ ធ្វើរោគវិនិច្ឆ័យ → ស្វ័យប្រវត្តិកម្ម → អនុវត្ត.
ហេតុអ្វី Guardrails រឿងរ៉ាវ: In CI/CD, guardrails បញ្ឈប់ការកំណត់រចនាសម្ព័ន្ធ TLS ដែលមិនមានសុវត្ថិភាពមុនពេលពួកវាចាប់ផ្តើមដំណើរការ។ ពួកវាអាចរារាំងការដាក់ពង្រាយបានប្រសិនបើ៖
- វិញ្ញាបនបត្រមួយជិតផុតកំណត់ហើយ
- កូដសម្ងាត់ខ្សោយត្រូវបានបើក
- ពិធីការហួសសម័យត្រូវបានប្រើ
ឧទាហរណ៍៖ នៅក្នុង GitLab CI ការងារមួយនឹងបរាជ័យភ្លាមៗ ប្រសិនបើចំណុចបញ្ចប់ឆ្លើយតបជាមួយ TLS 1.0 ដែលបង្ខំឱ្យមានការជួសជុលមុនពេលបញ្ចូលគ្នា។
ឧបករណ៍ដូចជា ស៊ីហ្គេនី អាចពង្រីកទាំងនេះ guardrails ដើម្បីស្កេនខ្សែសង្វាក់ផ្គត់ផ្គង់កម្មវិធីទាំងមូលរបស់អ្នកសម្រាប់ចន្លោះប្រហោងសុវត្ថិភាព TLS។
ការប្រើប្រាស់ OpenSSL s_client One-Liners ងាយស្រួលសម្រាប់ CI
ពិនិត្យមើលកាលបរិច្ឆេទផុតកំណត់៖
bash
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate
រាយបញ្ជីលេខសម្ងាត់៖
bash
openssl ciphers -v 'ALL:eNULL' | column -t
យកចុងក្រោយ
OpenSSL s_client គឺលើសពីពាក្យបញ្ជាដោះស្រាយបញ្ហាទៅទៀត។ វាជាឧបករណ៍ DevSecOps សម្រាប់សុវត្ថិភាព TLS ប្រកបដោយភាពសកម្ម។ ប្រើវាដើម្បីចាប់កំហុស SSL មុនពេលវាបំបែកការបង្កើតរបស់អ្នក ហើយធ្វើវាដោយស្វ័យប្រវត្តិ ដូច្នេះអ្នកមិនដែលភ្ញាក់ផ្អើលចំពោះការផុតកំណត់នៃវិញ្ញាបនបត្រ ឬការអ៊ិនគ្រីបខ្សោយម្តងទៀតឡើយ។







