ฉันจะอนุญาต HTTPS สำหรับ Apache บนโลคอลโฮสต์ได้อย่างไร


193

ฉันถูกขอให้ตั้งค่า HTTPS พร้อมใบรับรองที่ลงนามด้วยตนเองใน Apache บน localhost แต่ฉันจะทำเช่นนั้นได้อย่างไร ฉันไม่มีความคิดเลย


1
ใช้Serveo ! ssh -R youruniquesubdomain:80:localhost:3000 serveo.netตบในโดเมนย่อยและหมายเลขพอร์ตของคุณและคุณพร้อมที่จะไปhttps://youruniquesubdomain.serveo.net
totymedli

คำตอบ:


135

ฉันเพิ่งพยายามนี้ - ฉันต้องการที่จะทดสอบรหัสการพัฒนาบางอย่างเกี่ยวกับฉันlocalhost Apache บน Windows นี่คือ WAAAY ยากกว่าที่ควรจะเป็น แต่นี่คือขั้นตอนที่สามารถทำงานได้หลังจากการถอนขน ...

ฉันพบว่าการติดตั้ง Apache มาพร้อมกับopenssl.exeสิ่งที่เป็นประโยชน์ หากคุณไม่มีสำเนาคุณจะต้องดาวน์โหลด สำเนาของฉันอยู่ในApache2\binโฟลเดอร์ซึ่งเป็นวิธีอ้างอิงด้านล่าง

ขั้นตอน:

  1. ให้แน่ใจว่าคุณมีสิทธิ์เขียนไปยังโฟลเดอร์ conf Apache ของคุณ
  2. เปิดพรอมต์คำสั่งในApache2\confโฟลเดอร์
  3. ชนิด
    ..\bin\openssl req -config openssl.cnf -new -out blarg.csr -keyout blarg.pem
  4. คุณสามารถเว้นว่างคำถามทั้งหมดไว้ยกเว้น:

    • PEM วลีรหัสผ่าน: รหัสผ่านชั่วคราวเช่น "รหัสผ่าน"
    • ชื่อสามัญ: ชื่อโฮสต์ของเซิร์ฟเวอร์ของคุณ

  5. เมื่อเสร็จแล้วให้พิมพ์
    ..\bin\openssl rsa -in blarg.pem -out blarg.key

  6. สร้างใบรับรองที่ลงชื่อด้วยตนเองโดยพิมพ์:
    ..\bin\openssl x509 -in blarg.csr -out blarg.cert -req -signkey blarg.key -days 365

  7. เปิดconf\httpd.confไฟล์ของ Apache และตรวจสอบให้แน่ใจว่าเปิดใช้งานโมดูล SSL แล้วไม่ควรมีแฮชที่จุดเริ่มต้นของบรรทัดนี้:
    LoadModule ssl_module modules/mod_ssl.so

  8. การติดตั้ง Apache บางตัวจะกำหนดค่า SSL ในไฟล์แยกต่างหาก ถ้าเป็นเช่นนั้นตรวจสอบให้แน่ใจว่ามีการรวมไฟล์ SSL conf ในกรณีของฉันฉันต้องยกเลิกหมายเหตุบรรทัดนี้:
    Include conf/extra/httpd-ssl.conf

  9. ในการกำหนดค่า SSL httpd-ssl.confฉันต้องอัปเดตบรรทัดต่อไปนี้:

    • อัปเดต
      SSLSessionCache "shmcb:C:\Program Files (x86)\Zend\Apache2/logs/ssl_scache(512000)"
      เป็น
      SSLSessionCache "shmcb:C:/Progra\~2/Zend/Apache2/logs/ssl_scache(512000)"
      (วงเล็บเหลี่ยมในพา ธ ทำให้โมดูลสับสนดังนั้นเราต้องหลบหนีออกไป)
    • DocumentRoot - ตั้งค่านี้เป็นโฟลเดอร์สำหรับไฟล์เว็บของคุณ
    • ServerName - ชื่อโฮสต์ของเซิร์ฟเวอร์
    • SSLCertificateFile "conf/blarg.cert"
    • SSLCertificateKeyFile "conf/blarg.key"

  10. รีสตาร์ท Apache

  11. ลองโหลดhttps://localhost/ในเบราว์เซอร์ของคุณ

หวังว่าคุณจะทำได้ไกลขนาดนี้ โปรดอัปเดตโพสต์นี้ด้วยข้อมูลที่เป็นประโยชน์อื่น ๆ

(ภาพหน้าจอมารยาทของ Neil Obremski และบทความที่เป็นประโยชน์ของเขา- แม้ว่าตอนนี้ค่อนข้างล้าสมัย)


2
ขอบคุณ ฉันต้องแก้ไขคำสั่ง ErrorLog, TransferLog และ CustomLog เพื่อพา ธ ที่ถูกต้องมิฉะนั้น Apache จะไม่เริ่มทำงาน
Tamlyn

1
ด้วยเหตุผลบางอย่างคำแนะนำไม่ทำงานอีกต่อไปหรือไม่สมบูรณ์
Jacobian

6
ฉันต้องยกเลิกการคอมเม้นต์ต่อไปนี้ใน httpd.conf ของฉันเพื่อให้ทำงานได้: LoadModule socache_shmcb_module modules / mod_socache_shmcb.so
erik

1
ฉันทำสองขั้นตอนเพิ่มเติมเพื่อให้ทำงานเพิ่มโมดูล LoadModule socache_shmcb_module modules / mod_socache_shmcb.so และใน httpd-ssl.conf ฉันแก้ไขพา ธ บันทึก ssl ที่บรรทัด 250, CustomLog ".apache24 / logs / ssl_request.log" \
Wasim A .

5
เพื่อสร้างไฟล์. pem และ. key ฉันต้องตั้งค่าตัวแปรสภาพแวดล้อม 2 ขั้นตอนที่ 2: set OPENSSL_CONF = C: \ path \ to \ apache \ Apache2.4.4 \ conf \ openssl.cnf ตั้งค่า RANDFILE = C: \ เส้นทาง \ to \ apache \ Apache2.4.4 \ conf \ .rnd
eosphere

57

ฉันใช้ ngrok ( https://ngrok.com/ ) สำหรับสิ่งนี้ ngrok เป็นเครื่องมือบรรทัดคำสั่งและสร้างอุโมงค์สำหรับ localhost มันสร้างการเชื่อมต่อทั้ง http และ https หลังจากดาวน์โหลดแล้วต้องรันคำสั่งต่อไปนี้:

ngrok http 80

(ในรุ่น 2 ไวยากรณ์คือ: ngrok http 80 ในรุ่น 2 พอร์ตใด ๆ สามารถถูกอุโมงค์ได้)

หลังจากผ่านไปสองสามวินาทีมันจะให้สอง URL:

http://a_hexadecimal_number.ngrok.com
https://a_hexadecimal_number.ngrok.com

ทีนี้ทั้ง url ก็ชี้ไปที่ localhost


1
@sudip, โค้ดโอเพนซอร์สของ ngrok ทำงานในลักษณะที่เราสามารถโฮสต์สิ่งนี้บนเซิร์ฟเวอร์ของเราเองโดยไม่มีการดัดแปลงหรือไม่? ถ้าไม่เป็นเช่นนั้นมันเป็น showstopper มากเพราะไม่สามารถเปลี่ยนเส้นทางผู้ใช้ไปยังโฮสต์ภายนอกเช่น ngrok
Pacerier

2
@Pierier ฉันไม่ต้องการใช้บนเซิร์ฟเวอร์ ฉันใช้บน localhost (Bcz ผู้ให้บริการเครือข่ายของฉันให้ไดนามิก IP) ฉันใช้มันเป็นครั้งแรกสำหรับการทดสอบ IPN ของ paypal และทำงานได้อย่างสมบูรณ์ ฉันสงสัยว่าทำไมบางคนจะใช้มันบนเซิร์ฟเวอร์และเพื่อวัตถุประสงค์อะไร
sudip

@sudip มีจุดประสงค์ที่ชัดเจนในการอนุญาตให้ใช้รหัสที่ทำงานบน HTTP เพื่อทำงานกับ HTTPS โดยไม่ต้องมีการเข้ารหัสเพิ่มเติม
Pacerier

1
แม้ว่ามันจะมีประโยชน์ แต่ก็ดูเหมือนจะไม่ปลอดภัยอย่างไม่น่าเชื่อที่อนุญาตให้เข้าถึงเครื่อง dev ของคุณไปยังอินเทอร์เน็ตแบบเปิด การใช้บางสิ่งเช่นนี้จะทำให้คุณถูกไล่ออกจากงานด้านความปลอดภัย
Andy M

@YumYumYum มันฟรีอย่างสมบูรณ์มาก่อนใน V 1 แต่พอร์ต http และ https ยังคงว่างใน v 2 (ไม่ทราบว่าข้อ จำกัด พอร์ตใด ๆ ที่มีแผนฟรี) ตรวจสอบแผนฟรีได้ที่นี่: ngrok.com/product#pricing
sudip

24

นี่เป็นวิธีที่ง่ายที่สุดในการทำสิ่งนี้

ก่อนอื่นให้คัดลอกไฟล์server.crt & server.keyเหล่านี้(ค้นหาในไฟล์แนบ) ลงในไดเรกทอรี apache / conf / ssl ของคุณ

จากนั้นเปิดไฟล์ httpd.conf และเพิ่มบรรทัดต่อไปนี้

Listen 80
Listen 443

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:443>
    DocumentRoot "d:/wamp/www"  #your wamp www root dir
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "d:/wamp/bin/apache/Apache2.4.4/conf/ssl/server.crt"
    SSLCertificateKeyFile "d:/wamp/bin/apache/Apache2.4.4/conf/ssl/server.key"
</VirtualHost>

3
ฉันต้องเปิดใช้งานโมดูล LoadModule ssl_module libexec / apache2 / mod_ssl.so ใน (/etc/apache2/httpd.conf)
Alexey

17
ฉันสงสัยว่าการดาวน์โหลด * .crt * .key ปลอดภัยหรืออันตรายอย่างไรจากแหล่งที่ไม่น่าเชื่อถือแทนที่จะสร้างของคุณเอง
Petr Peller

4
@PetrPeller เรากำลังตั้งค่า https สำหรับการพัฒนาในท้องถิ่นดังนั้นเหตุใดจึงต้องสงสัยว่าปลอดภัย / อันตราย
Anil Gupta

7
คำอธิบายวิธีการสร้างไฟล์เหล่านั้นจะดีมาก เพราะการดาวน์โหลดไฟล์จากแหล่งที่ไม่รู้จักนั้นเป็นวิธีปฏิบัติที่ไม่ดี แต่ก็เป็นเพราะลิงก์ประเภทนั้นจะแตกในบางจุด
เตฟาน Vierkant

2
บทเรียนนี้ใช้ได้ดีdigitalocean.com/community/tutorials/…
Dhiraj

13

เพื่อปกป้องความปลอดภัยของข้อมูลที่ถูกส่งไปยังและจากเว็บเซิร์ฟเวอร์ของคุณเป็นความคิดที่ดีที่จะเปิดใช้งานการเข้ารหัสการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์ นี้มักจะถูกเรียกว่าSSL

ดังนั้นเรามาตั้ง HTTPS พร้อมใบรับรองที่ลงนามเองบน Apache2 ฉันจะทำรายการขั้นตอนที่คุณควรทำตาม:

  • ติดตั้ง apache2 เว็บเซิร์ฟเวอร์บนเครื่องของคุณ สำหรับเครื่อง linux ให้เปิดเทอร์มินัลแล้วพิมพ์

sudo apt-get install apache2

  • หลังจากติดตั้งสำเร็จให้ตรวจสอบสถานะของบริการ apache2 โดยดำเนินการคำสั่ง

สถานะ apache2 ของบริการ sudo

มันควรจะออก

สถานะบริการ apache2

  • นำทางไปยังเบราว์เซอร์และประเภท

http: // localhost: 80

ตรวจสอบว่าคุณได้รับหน้าเริ่มต้นสำหรับ apache2 เช่นนี้

เอาต์พุตดีฟอลต์ของ apache2

  • สำหรับการเข้ารหัสการเชื่อมต่อเว็บเราต้องการใบรับรองจาก CA (ผู้ออกใบรับรอง) หรือเราสามารถใช้ใบรับรองที่ลงนามด้วยตนเอง มาสร้างใบรับรองที่เซ็นชื่อเองโดยใช้คำสั่งต่อไปนี้

openssl req -x509 -newkey rsa: 2048 -keyout mykey.key -out mycert.pem -days 365-nodes

กรุณากรอกข้อมูลตามที่แสดงด้านล่าง

สร้างใบรับรองที่ลงชื่อด้วยตนเองโดยใช้ openssl

ควรสร้างmykey.keyและmycert.pemในไดเรกทอรีทำงานปัจจุบันของคุณ

  • มันคงจะดีถ้าเราย้ายใบรับรองและกุญแจในที่สาธารณะและมันจะง่ายสำหรับเว็บเซิร์ฟเวอร์ apache2 ในการค้นหา ดังนั้นเราจะรันคำสั่งต่อไปนี้

sudo cp mycert.pem / etc / ssl / certs

sudo cp mykey.key / etc / ssl / private

  • มาเปิดใช้งานโหมด SSL บนเซิร์ฟเวอร์ของคุณ

sudo a2enmod ssl

มันควรจะออกเช่นนี้

เปิดใช้งาน ssl

  • มากำหนดค่า apache2 เพื่อใช้ใบรับรองที่ลงนามด้วยตนเองและรหัสที่เราได้สร้างไว้ข้างต้น

sudo vi /etc/apache2/sites-available/default-ssl.conf

โปรดหาสองบรรทัดนี้และแทนที่ด้วยใบรับรองและเส้นทางหลักของคุณ

แรกเริ่ม

เริ่มต้น conf

สุดท้าย

หลังจากการเปลี่ยนแปลงการกำหนดค่า

  • เปิดใช้งานไซต์

cd / etc / apache2 / sites-available /

sudo a2ensite default-ssl.conf

  • เริ่มบริการ apache2 ใหม่

sudo service apache2 เริ่มต้นใหม่

  • ตรวจสอบ apache2 เว็บเซิร์ฟเวอร์บน HTTPS เปิดเบราว์เซอร์ของคุณอีกครั้งและพิมพ์

https: // localhost: 443

ควรแสดงผลลัพธ์เช่นนี้พร้อมคำเตือนว่าหน้าเว็บที่คุณกำลังดูไม่ปลอดภัยเนื่องจากเราได้กำหนดค่าเซิร์ฟเวอร์ด้วยใบรับรองที่ลงชื่อด้วยตนเอง

ป้อนคำอธิบายรูปภาพที่นี่

  • ขอแสดงความยินดีที่คุณได้กำหนดค่า apache2 ของคุณด้วย HTTPS endpoint ตอนนี้คลิกที่ขั้นสูง -> เพิ่มข้อยกเว้น -> ยืนยันข้อยกเว้นด้านความปลอดภัยคุณจะเห็นหน้าเริ่มต้นอีกครั้ง

หน้าหลังจากเพิ่มข้อยกเว้น


ฉันไม่ต้องการแก้ไขไฟล์ปรับแต่งใด ๆ หากทำได้ดังนั้นฉันจึงออกจากdefault-ssl.confที่นี่ ผมกำลังจะเปลี่ยนชื่อmycertไปssl-cert-snakeoilแต่ไฟล์นี้อยู่แล้วดังนั้นผมจึงใช้เพียงแค่นั้น! ดังนั้นฉันสามารถข้ามสองขั้นตอนไปกับ Debian ได้อย่างปลอดภัย
Rolf

@Rolf ฉันเห็นด้วยกับคุณ แต่ในการผลิตเป็นกรณีเสมอใช้ใบรับรองและคีย์ใหม่ ดังนั้นเพื่อแสดงว่าพวกเขาสามารถสร้างได้อย่างไรฉันได้เพิ่ม 2 ขั้นตอนเพิ่มเติมสำหรับ Debian ขอบคุณ :)
Dinesh Kumar

มีวิธีใดบ้างที่ฉันสามารถเพิ่มใบรับรองที่ลงชื่อด้วยตนเองของฉันเป็นผู้ออกใบรับรองเพื่อหลีกเลี่ยงการดูคำเตือน
Aaron Franke

9

Windows + Apache 2.4 ตัวอย่างเช่น:

  1. uncomment ssl_module ในhttpd.confไฟล์ของคุณ

    LoadModule ssl_module modules/mod_ssl.so
    
  2. ฟังพอร์ต 443 เช่นเดียวกับ 80 พอร์ตในhttpd.confไฟล์ของคุณ

    Listen 80
    Listen 443
    
  3. uncomment รวมถึงโฮสต์เสมือนในhttpd.confไฟล์ของคุณ

    # Virtual hosts
    Include conf/extra/httpd-vhosts.conf
    
  4. เพิ่ม VirtualHost ในของคุณ conf/extra/httpd-vhosts.conf

    <VirtualHost _default_:443>
        DocumentRoot "D:/www"  #your site directory path
        ServerName localhost
        #ServerAlias localhost.com localhost2.com
        SSLEngine on
        SSLCertificateFile "${SRVROOT}/conf/ssl/server.crt"
        SSLCertificateKeyFile "${SRVROOT}/conf/ssl/server.key"
        <Directory "D:/www">
            Options -Indexes +FollowSymLinks +ExecCGI
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>
    

เฉพาะหมายเลขพอร์ต443และSSL......บรรทัดต่างจาก http ปกติการตั้งค่า

บันทึกไฟล์ config และเริ่มบริการ apache ใหม่ จากนั้นคุณสามารถเยี่ยมชมhttps: // localhost /

เว็บเบราว์เซอร์จะเตือนคุณว่าไม่ปลอดภัยในครั้งแรกเพียงเลือกดำเนินการต่อ


สิ่งนี้ใช้ได้กับฉันใน XP Home, Apache 2.4 คัดลอกไฟล์ใบรับรอง 2 ไฟล์จากโพสต์ก่อนหน้า (โดย Anil Gupta) uncommented mod_ssl และรวม httpd-vhosts.conf ใน httpd.conf เพิ่มคำสั่ง VirtualHost ของ Anil Gupta (พร้อมบางเส้นทางที่ปรับ) ใน httpd-vhosts.conf
jogi99

7

จริงๆแล้วมันค่อนข้างง่ายสมมติว่าคุณมีการติดตั้ง openssl สะดวก (คุณอยู่บนแพลตฟอร์มใด)

สมมติว่าคุณอยู่ใน linux / solaris / mac os / x, Apache SSL / TLS mini-HOWTO ของ Vanมีแนวทางที่ยอดเยี่ยมที่ฉันจะไม่ทำซ้ำที่นี่

อย่างไรก็ตามบทสรุปสำหรับผู้บริหารคือคุณต้องสร้างใบรับรองที่ลงนามเอง เนื่องจากคุณใช้ apache สำหรับ localhost น่าจะเป็นการพัฒนา (ไม่ใช่เว็บเซิร์ฟเวอร์สาธารณะ) คุณจะรู้ว่าคุณสามารถเชื่อถือใบรับรองที่ลงนามด้วยตนเองและสามารถเพิกเฉยต่อคำเตือนที่เบราว์เซอร์ของคุณจะส่งถึงคุณ


สวัสดีฉันกำลังทำงานบน Windows OS และสำหรับใบรับรองที่ลงชื่อด้วยตนเองฉันต้องดาวน์โหลดหรือโดยวิธีอื่นใด
KennC

3
Nope คุณจะทำให้ใบรับรองที่ลงชื่อด้วยตัวเองด้วยตัวเอง คุณมี apache httpd + ssl setup หรือไม่ คุณจะต้องใช้ ssl เพื่อดำเนินการนี้ เว็บไซต์นี้: rubayathasan.com/tutorial/apache-ssl-on-windowsมีข้อมูลที่ดีเกี่ยวกับการใช้ ssl ไปบน windows คุณจะได้งานบรรทัดคำสั่ง แต่ก็ดีสำหรับคุณ :-)
Pete Clark

3
ลิงก์ตาย :(
kpuccino

ใช่ - ดูเหมือนว่าจะตายแล้ว นั่นคืออินเทอร์เน็ตสำหรับคุณ ... อย่างไรก็ตามลิงก์ไปยัง CentOS Wiki ด้านล่างที่อ้างอิงโดย @kayakinkoder ก็ดี: wiki.centos.org/HowTos/Httpsถ้าคุณใช้ mac การเขียนนี้ก็ดูสมเหตุสมผล: gist github.com/nrollr/4daba07c67adcb30693e
Pete Clark

4

นี่น่าจะเป็น Ubuntu, Mint ที่คล้ายกับ Apache2

มันเป็นแนวทางที่ดีดังนั้นควรทำตามนี้

https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-14-04

และปล่อยให้ ssl.conf ของคุณเป็นแบบนี้หรือคล้ายกัน

<VirtualHost _default_:443>
        ServerAdmin your@email.com
        ServerName localhost
        ServerAlias www.localhost.com

        DocumentRoot /var/www


    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

คุณสามารถรับมัน

หวังว่าความช่วยเหลือนี้สำหรับ linuxer


2

มันง่ายมาก

เพียงแค่เรียกใช้คำสั่งต่อไปนี้

sudo a2enmod ssl

sudo service apache2 restart

sudo a2ensite default-ssl.conf

เพียงเท่านี้คุณก็ทำเสร็จแล้ว

หากคุณต้องการบังคับ SSL (ให้ใช้ https เสมอ) ให้แก้ไขไฟล์:

sudo nano /etc/apache2/sites-available/000-default.conf

และเพิ่มหนึ่งบรรทัดนี้

<VirtualHost *:80>
        . . .

        Redirect "/" "https://your_domain_or_IP/"

        . . .
</VirtualHost>

จากนั้นรีสตาร์ทอีกครั้ง

sudo service apache2 restart

และคุณจำเป็นต้องเรียกใช้หลังจากsystemctl reload apache2 sudo a2ensite default-ssl.conf
จนถึง

2

2563 ปรับปรุง

ฉันโพสต์คำตอบนี้เนื่องจากฉันต่อสู้ด้วยตัวเองและ Chrome ได้อัปเดตความปลอดภัยโดยกำหนดชื่อสำรองของหัวเรื่องที่ไม่มีบทความจำนวนมากเนื่องจากไม่จำเป็นเมื่อมีการโพสต์เป็นคำตอบ ฉันสมมติว่าติดตั้ง WAMP แล้ว

ขั้นตอนที่ 1

ดาวน์โหลดOpenSSL Light แล้วติดตั้ง


** ขั้นตอนที่ 2 (ตัวเลือก) **

แม้ว่าส่วนนี้จะเป็นทางเลือก แต่มันจะทำให้ง่ายต่อการรันคำสั่งในภายหลัง หากคุณข้ามขั้นตอนนี้คุณจะต้องระบุเส้นทางแบบเต็มไปที่ openssl.exe ซึ่งคุณจะใช้คำสั่ง หากคุณต้องการตั้งค่าให้อัพเดตพา ธ openssl.exe ใน Environment Variables

ตัวแปรสภาพแวดล้อม -> ตัวแปรระบบ -> เส้นทาง -> แก้ไข -> ใหม่ -> c: \ Program Files \ OpenSSL-Win64 \ bin


** ขั้นตอนที่ 3 **

สร้างโฟลเดอร์ชื่อ“ กุญแจ”ในc:/wamp64/bin/apache/apache2.4.27(your version number)/conf/ไดเรกทอรี

สร้างไฟล์กำหนดค่าสำหรับ CA MyCompanyCA.cnfของคุณด้วยเนื้อหา (คุณสามารถเปลี่ยนได้ตามความต้องการของคุณ):

[ req ]
distinguished_name  = req_distinguished_name
x509_extensions     = root_ca

[ req_distinguished_name ]
countryName             = Country Name (2 letter code)
countryName_min         = 2
countryName_max         = 2
stateOrProvinceName     = State or Province Name (full name)
localityName            = Locality Name (eg, city)
0.organizationName      = Organization Name (eg, company)
organizationalUnitName  = Organizational Unit Name (eg, section)
commonName              = Common Name (eg, fully qualified host name)
commonName_max          = 64
emailAddress            = Email Address
emailAddress_max        = 64

[ root_ca ]
basicConstraints            = critical, CA:true

สร้างไฟล์กำหนดค่าส่วนขยายMyCompanyLocalhost.extสำหรับใบรับรองเว็บเซิร์ฟเวอร์ของคุณ:

subjectAltName = @alt_names
extendedKeyUsage = serverAuth

[alt_names]
DNS.1   = localhost
DNS.2   = mycy.mycompany.com

** ขั้นตอนที่ 4 **

ดำเนินการคำสั่งเหล่านี้ตามลำดับที่กำหนดเพื่อสร้างคีย์และใบรับรอง:

openssl req -x509 -newkey rsa:2048 -out MyCompanyCA.cer -outform PEM -keyout MyCompanyCA.pvk -days 10000 -verbose -config MyCompanyCA.cnf -nodes -sha256 -subj "/CN=MyCompany CA"
openssl req -newkey rsa:2048 -keyout MyCompanyLocalhost.pvk -out MyCompanyLocalhost.req -subj /CN=localhost -sha256 -nodes
openssl x509 -req -CA MyCompanyCA.cer -CAkey MyCompanyCA.pvk -in MyCompanyLocalhost.req -out MyCompanyLocalhost.cer -days 10000 -extfile MyCompanyLocalhost.ext -sha256 -set_serial 0x1111

เป็นผลให้คุณจะมีMyCompanyCA.cer , MyCompanyLocalhost.cerและMyCompanyLocalhost.pvkไฟล์


** ขั้นตอนที่ 5 **

ติดตั้งMyCompanyCA.cerภายใต้

แผงควบคุม -> จัดการใบรับรองผู้ใช้ -> ผู้ออกใบรับรองหลักที่เชื่อถือได้ -> ใบรับรอง

หากต้องการติดตั้งMyCompanyLocalhost.cerเพียงดับเบิลคลิก


** ขั้นตอนที่ 6 **

เปิดc:/wamp64/bin/apache/apache2.4.27(your version number)/conf/httpd.confและยกเลิกความคิดเห็น (ลบ #) 3 บรรทัดต่อไปนี้:

LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

** ขั้นตอนที่ 7 **

เปิดc:/wamp64/bin/apache/apache2.4.37/conf/extra/httpd-ssl.confและเปลี่ยนพารามิเตอร์ทั้งหมดเป็นพารามิเตอร์ที่แสดงด้านล่าง:

Directory "c:/wamp64/www"
DocumentRoot "c:/wamp64/www"
ServerName localhost:443
ServerAdmin admin@example.com
ErrorLog "c:/wamp64/bin/apache/apache2.4.27/logs/error.log"
TransferLog "c:/wamp64/bin/apache/apache2.4.27/logs/access.log"
SSLCertificateFile "c:/wamp64/bin/apache/apache2.4.27/conf/key/MyCompanyLocalhost.cer"
SSLCertificateKeyFile "c:/wamp64/bin/apache/apache2.4.27/conf/key/MyCompanyLocalhost.pvk"
SSLSessionCache "shmcb:c:/wamp64/bin/apache/apache2.4.27/logs/ssl_scache(512000)"
CustomLog "c:/wamp64/bin/apache/apache2.4.27/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

หมายเหตุ: นี่เป็นส่วนที่ยุ่งยาก หากคุณทำผิดพลาดเล็กน้อยในขณะที่แก้ไขไฟล์นี้ SSL จะไม่ทำงาน ทำสำเนาก่อนที่จะแก้ไข


** ขั้นตอนที่ 8 **

รีสตาร์ท Wamp และ Chrome Localhost ปลอดภัยแล้ว: https: // localhost


คุณมีคำแนะนำสำหรับ Linux หรือไม่?
Aaron Franke

น่าเสียดายที่ฉันทำไม่ได้
CodeWarrior

1

HowTo for CentOS นี้ง่ายต่อการติดตามและใช้เวลาเพียง 5 นาที: https://wiki.centos.org/HowTos/Https

ฉันจะไม่ให้รายละเอียดแต่ละขั้นตอนที่นี่ แต่ขั้นตอนหลักคือ:

1. ) ติดตั้งโมดูล openssl สำหรับ apache หากยังไม่ได้ติดตั้ง

2. ) สร้างใบรับรองที่ลงชื่อด้วยตนเอง

- ณ จุดนี้คุณควรจะสามารถเยี่ยมชมhttps: // localhost ได้สำเร็จ

3. ) ตั้งค่าโฮสต์เสมือนถ้าจำเป็น


1

สิ่งนี้ใช้ได้กับ Windows 10 ที่มี Apache24:

1 - เพิ่มสิ่งนี้ที่ด้านล่างของ C:/Apache24/conf/httpd.conf

Listen 443
<VirtualHost *:443>
    DocumentRoot "C:/Apache24/htdocs"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "C:/Apache24/conf/ssl/server.crt"
    SSLCertificateKeyFile "C:/Apache24/conf/ssl/server.key"
</VirtualHost>

2 - เพิ่มserver.crtและserver.keyไฟล์ในC:/Apache24/conf/sslโฟลเดอร์ ดูคำตอบอื่น ๆ ในหน้านี้เพื่อค้นหา 2 ไฟล์เหล่านั้น

แค่นั้นแหละ!


ใช่มันใช้งานได้ดี ฉันใช้ขั้นตอนที่ 1 - 3 จาก StephanieQ เพื่อสร้างใบรับรองและกว่า "openssl x509 -req -in server.csr -signkey server.key -out server.crt" เพื่อสร้างไฟล์ * .crt ด้วย cygwin
b3wii

ฉันไม่มีhttpd.confไฟล์ฉันจะใส่ไฟล์อะไรลงไป? นี่คือสิ่งที่เกิดขึ้นเมื่อฉันใส่ข้อความนี้ไว้apache2.conf:Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
Aaron Franke

1

TL; DR

ssh -R youruniquesubdomain:80:localhost:3000 serveo.net

และสภาพแวดล้อมในพื้นที่ของคุณสามารถเข้าถึงได้จากhttps://youruniquesubdomain.serveo.net

Serveoดีที่สุด

  • ไม่มีการสมัคร
  • ไม่มีการติดตั้ง
  • มี HTTPS
  • เข้าถึงได้ทั่วโลก
  • คุณสามารถระบุโดเมนย่อยที่กำหนดเองได้
  • คุณสามารถโฮสต์ด้วยตนเองเพื่อให้คุณสามารถใช้โดเมนของคุณเองและเป็นหลักฐานในอนาคตแม้ว่าบริการจะหยุดทำงาน

ฉันไม่อยากจะเชื่อเมื่อพบบริการนี้ มันมีทุกอย่างและใช้ง่ายที่สุด หากมีเครื่องมือที่ง่ายและไม่เจ็บปวดสำหรับทุกปัญหา ...


สิ่งนี้ไม่ทำงานอีกต่อไปในปี 2020 หน้าเว็บโหลดตลอดไป อย่างไรก็ตามด้วยเหตุผลบางอย่างคำสั่ง SSH ยังคงใช้งานได้ ... ?
Aaron Franke

1

ใช้งาน Apache บน Windows 10 ได้ที่นี่ ฉันไม่สามารถทำให้ Chrome เชื่อถือใบรับรองที่ทำในคำตอบสูงสุดโดย Simon สิ่งที่ฉันทำคือใช้ PowerShell เพื่อสร้างใบรับรองที่ลงชื่อด้วยตนเอง

ขั้นตอนที่ 1 - สร้างใบรับรองที่ลงชื่อด้วยตนเอง

ใน PowerShell
New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My" 1

ขั้นตอนที่ 2 - กำหนดค่าและส่งออกใบรับรอง

พิมพ์Certificateลงในแถบค้นหา Windows คลิกManage Computer Certificatesรายการแผงควบคุมที่แนะนำ

จากโปรแกรมการจัดการใบรับรองที่เกิดขึ้น (certlm) ตอนนี้คุณควรจะเห็นภายใต้คีย์localhostPersonal >> Certificates

Trusted Root Certification Authoritiesผมคัดลอกใบรับรองนี้เข้าไป ฉันจะซื่อสัตย์ในสิ่งที่ฉันไม่แน่ใจว่าจำเป็น

เลือกใบรับรองที่คัดลอกใหม่ดับเบิลคลิกที่มัน (ใบรับรอง localhost) จาก Modal ใบรับรองคลิกที่Detailsแท็บแล้วCopy to File...ปุ่ม

สิ่งนี้จะปรากฏขึ้นและตัวช่วยสร้างการส่งออกฉันเลือกที่จะส่งออกคีย์ส่วนตัวคลิกถัดไป ฉันก็เลือกที่จะExport all extended properties(อีกครั้งฉันไม่แน่ใจว่าจำเป็นหรือไม่) ฉันเลือกที่จะใช้รหัสผ่านแบบง่าย ( pass) และการเข้ารหัสเริ่มต้น เลือกโฟลเดอร์ที่จะส่งออกและตั้งชื่อไฟล์ คุณสามารถย้ายและเปลี่ยนชื่อไฟล์หากจำเป็น เพื่อความเรียบง่ายลองคัดลอกไปยังโฟลเดอร์ conf ของคุณภายใต้การติดตั้ง Apache ของคุณ (ในกรณีของฉัน:) C:\apache\confและตั้งชื่อไฟล์myCert(ไฟล์ผลลัพธ์จะเป็น.pfxไฟล์)

ขั้นตอนที่ 3 - แปลง.pfxไฟล์เพื่อใช้กับ Apache

จากที่นี่โดยทั่วไปฉันติดตามการกวดวิชาที่นี่แต่ฉันจะเพิ่มคำแนะนำที่นี่ (tweaked สำหรับการตั้งค่าของเรา) ในกรณีที่เว็บไซต์จะลง

เปิดพรอมต์คำสั่งของคุณใน/apache/conf/โฟลเดอร์
เรียกใช้คำสั่งต่อไปนี้: หมายเหตุ:นี่ถือว่าคุณมีopenssl.exeในbinโฟลเดอร์ในโฟลเดอร์ราก apache (ซึ่งควรเป็นมาตรฐาน / ค่าเริ่มต้น)

..\bin\openssl pkcs12 -in myCert.pfx -nocerts -out privateKey.pem

สิ่งนี้จะแจ้งให้คุณใส่รหัสผ่านป้อนสิ่งที่คุณป้อนสำหรับขั้นตอนที่ 2 เมื่อคุณส่งออก.pfxไฟล์ passในกรณีของฉันนี้เป็น ฉันป้อนรหัสผ่านเดียวกันสำหรับวลี PEM และยืนยันอีกครั้ง สิ่งนี้จะสร้างไฟล์ใหม่ที่เรียกว่าprivateKey.pemในโฟลเดอร์ conf ของคุณ

จากนั้นเรียกใช้

..\bin\openssl rsa -in privateKey.pem -out private.pem

อีกครั้งคุณจะได้รับแจ้งรหัสผ่าน ( Enter pass phrase for privateKey.pem:) privateKey.pemให้ใช้รหัสผ่านที่คุณตั้งไว้สำหรับ (ในกรณีของฉันpass)
คุณควรเห็นข้อความที่ระบุว่าwriting RSA keyและไฟล์ใหม่ที่เรียกว่าprivate.pemในconf/โฟลเดอร์ของคุณ นี่จะเป็น SSLCertificateKeyFile ของคุณ

ตอนนี้เพื่อสร้างใบรับรองเซิร์ฟเวอร์ที่สอดคล้องกัน วิ่ง:

..\bin\openssl pkcs12 -in myCert.pfx -clcerts -nokeys -out EntrustCert.pem

สิ่งนี้จะแจ้งให้คุณใส่รหัสผ่านป้อนสิ่งที่คุณป้อนสำหรับขั้นตอนที่ 2 เมื่อคุณส่งออก.pfxไฟล์ ใส่มันและคุณจะมีไฟล์ชื่อEntrustCert.pemในconfโฟลเดอร์ ของคุณ นี่คือไฟล์ SSLCertificate ของคุณ

ขั้นตอนที่ 4 - กำหนดค่า httpd.conf

ใช้ไฟล์ใหม่ที่สร้างขึ้นเป็นคีย์และใบรับรองเซิร์ฟเวอร์ของคุณ อย่าลืมเปลี่ยนรูทของเอกสารเป็นไฟล์ของคุณ!

ServerName localhost:80
Protocols h2 h2c http/1.1
<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>

<VirtualHost _default_:443>
  ServerName localhost:443
  DocumentRoot ${SRVROOT}/htdocs/MYSITE
  SSLEngine on
  SSLCertificateFile "${SRVROOT}/conf/EntrustCert.pem"
  SSLCertificateKeyFile "${SRVROOT}/conf/private.pem"
</VirtualHost>

นอกจากนี้ในhttpd.conf:

  • ตรวจสอบให้แน่ใจว่าLoadModule ssl_module modules/mod_ssl.soไม่ใส่เครื่องหมายถูก (ไม่มี#ด้านหน้า)
  • uncomment LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
  • uncomment LoadModule http2_module modules/mod_http2.so
  • Uncomment Include conf/extra/httpd-ssl.conf (หมายเหตุ: ตรวจสอบให้แน่ใจว่าไฟล์อยู่ตรงไหน!)

ฉันยังมีห้องสมุด curl และ open ssl รวมอยู่ด้วย:

# load curl and open ssl libraries
LoadFile "C:\php\libeay32.dll"
LoadFile "C:\php\ssleay32.dll"
LoadFile "C:\php\libssh2.dll"

โมดูลเหล่านี้ไม่จำเป็น แต่ฉันจะทราบว่าฉันได้เปิดใช้งานแล้ว:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so

ขั้นตอนที่ 5 - กำหนดค่า httpd-ssl.conf

ในextra/โฟลเดอร์ในโฟลเดอร์ที่คุณจะเห็นไฟล์ที่เรียกว่าconf/httpd-ssl.conf

5a เปลี่ยนDocumentRoot - เปลี่ยนDocumentRootค่าเริ่มต้นเป็นไดเรกทอรีที่ไฟล์ของคุณอยู่

5b เปลี่ยนServerName - เปลี่ยนServerNameจากค่าเริ่มต้น (คล้ายwww.example.com:443) เป็นlocalhost:443

5c เปลี่ยนการSSLCertificateFile
เปลี่ยนSSLCertificateFileจากค่าเริ่มต้น ( ${SRVROOT}/conf/server.crt) เป็น${SRVROOT}/conf/EntrustCert.pem

5c เปลี่ยนการSSLCertificateKeyFile
เปลี่ยนSSLCertificateKeyFileจากค่าเริ่มต้น ( ${SRVROOT}/conf/server.key) เป็น${SRVROOT}/conf/private.pem

ทั้งหมดเข้าด้วยกันใน<VirtualHost _default_:443>แท็ก

#   General setup for the virtual host
DocumentRoot "${SRVROOT}/htdocs/MYSITE"
ServerName localhost:443
ServerAdmin admin@example.com
ErrorLog "${SRVROOT}/logs/error.log"
TransferLog "${SRVROOT}/logs/access.log"

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

#   Server Certificate:
#   Point SSLCertificateFile at a PEM encoded certificate.  If
#   the certificate is encrypted, then you will be prompted for a
#   pass phrase.  Note that a kill -HUP will prompt again.  Keep
#   in mind that if you have both an RSA and a DSA certificate you
#   can configure both in parallel (to also allow the use of DSA
#   ciphers, etc.)
#   Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
#   require an ECC certificate which can also be configured in
#   parallel.
SSLCertificateFile "${SRVROOT}/conf/EntrustCert.pem"
#SSLCertificateFile "${SRVROOT}/conf/server-dsa.crt"
#SSLCertificateFile "${SRVROOT}/conf/server-ecc.crt"

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
#   ECC keys, when in use, can also be configured in parallel
SSLCertificateKeyFile "${SRVROOT}/conf/private.pem"
#SSLCertificateKeyFile "${SRVROOT}/conf/server-dsa.key"
#SSLCertificateKeyFile "${SRVROOT}/conf/server-ecc.key"

รีสตาร์ท Apache

หลังจากทำการเปลี่ยนแปลงเหล่านี้คุณควรจะสามารถรีสตาร์ท Apache และไปที่https: // localhostโดยไม่มีคำเตือนความปลอดภัยและกุญแจเล็ก ๆ น้อย ๆ !

โลคัลโฮสต์ที่ปลอดภัย

ฉันหวังว่านี่จะช่วยให้ใครบางคน! 😊

แหล่งที่มา:
1. ) คำตอบของ Auri Rahimzadeh เกี่ยวกับการสร้างใบรับรองที่ลงนามด้วยตนเอง
2. ) ดาต้าการ์ดของ Entrust - ฉันจะแปลง. pfx ให้ใช้กับเซิร์ฟเวอร์ Apache ได้อย่างไร


0

อีกวิธีง่าย ๆ คือใช้เซิร์ฟเวอร์ Python ใน Ubuntu

  1. สร้าง server.xml ด้วยคำสั่งต่อไปนี้ใน terminal:

    openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes

    หมายเหตุ: สมมติว่าคุณติดตั้งopenssl

  2. บันทึกรหัสด้านล่างในไฟล์ชื่อsimple-https-server.pyในไดเรกทอรีใด ๆ ที่คุณต้องการเรียกใช้เซิร์ฟเวอร์

    import BaseHTTPServer, SimpleHTTPServer
    import ssl
    
    httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
    httpd.socket = ssl.wrap_socket (httpd.socket, certfile='./server.pem', server_side=True)
    httpd.serve_forever()
    
  3. เรียกใช้เซิร์ฟเวอร์จากเทอร์มินัล:

    python simple-https-server.py

  4. เยี่ยมชมหน้าได้ที่:

    https://localhost:4443

หมายเหตุเพิ่มเติม ::

  1. คุณสามารถเปลี่ยนพอร์ตในsimple-https-server.pyไฟล์ในบรรทัด

    httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)

  2. คุณสามารถเปลี่ยนlocalhostเป็น IP ของคุณในบรรทัดเดียวกันด้านบน:

    httpd = BaseHTTPServer.HTTPServer(('10.7.1.3', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)

    และเข้าถึงหน้าบนอุปกรณ์ใด ๆ ที่เครือข่ายของคุณเชื่อมต่อ สิ่งนี้มีประโยชน์มากในกรณีเช่น "คุณต้องทดสอบ HTML5 GeoLocation API ในมือถือและ Chrome จะ จำกัด API ในการเชื่อมต่อที่ปลอดภัยเท่านั้น"

สรุปสาระสำคัญ: https://gist.github.com/dergachev/7028596

http://www.piware.de/2011/01/creating-an-https-server-in-python/


0

สำหรับผู้ที่ใช้ macOS นี่เป็นแนวทางที่ดีhttps://getgrav.org/blog/macos-sierra-apache-multiple-php-versionsเพื่อตั้งค่าสภาพแวดล้อมการพัฒนาเว็บในพื้นที่ของคุณ ในส่วนที่ 3 https://getgrav.org/blog/macos-sierra-apache-ssl Andy Miller อธิบายวิธีตั้งค่า apache ด้วยใบรับรองที่ลงนามด้วยตนเอง:

นี่คือคำสั่งที่สำคัญ:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt

แต่มีไม่กี่ขั้นตอนที่คุณต้องทำตามดังนั้นตรวจสอบว่าและโชคดี! ;)


0

ฉันต้องการเพิ่มบางสิ่งลงในคำตอบที่ดีมากของ @CodeWarrior ที่ทำงานได้อย่างสมบูรณ์บน Chrome แต่สำหรับ Firefox ต้องมีขั้นตอนเพิ่มเติม

เนื่องจาก Firefox ไม่ได้ผลักใบรับรอง CA ที่ Windows ทำตามค่าเริ่มต้นคุณต้องดำเนินการต่อabout:configเลื่อนลงมาsecurity.enterprise_roots.enabled และเปลี่ยนเป็นจริง

ตอนนี้ใบรับรองของคุณควรถูกมองว่าถูกต้องเช่นกันบน Firefox

แน่นอนว่านี่เป็นเพียงเพื่อวัตถุประสงค์ในการพัฒนาเท่านั้นเนื่องจาก ssl trust เป็นข้อกังวลด้านความปลอดภัยที่สำคัญและเปลี่ยนการตั้งค่านี้เฉพาะเมื่อคุณทราบถึงผลกระทบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.