Bagaimana cara saya mengizinkan HTTPS untuk Apache di localhost?

193

Saya diminta untuk mengatur HTTPS dengan sertifikat yang ditandatangani sendiri pada Apache di localhost, tetapi bagaimana saya benar-benar melakukannya? Saya tidak tahu sama sekali.

KennC.
sumber
1
Gunakan Serveo ! ssh -R youruniquesubdomain:80:localhost:3000 serveo.netTampar di subdomain dan nomor port Anda dan Anda siap untuk melanjutkanhttps://youruniquesubdomain.serveo.net
totymedli

Jawaban:

135

Saya baru saja mencoba ini - saya perlu menguji beberapa kode pengembangan pada localhost Apache saya di Windows . Ini WAAAY lebih sulit dari yang seharusnya. Tapi di sini adalah langkah-langkah yang berhasil setelah banyak tusuk rambut ...

Saya menemukan bahwa instalasi Apache saya disertai dengan openssl.exeyang sangat membantu. Jika Anda tidak memiliki salinannya, Anda harus mengunduhnya. Salinan saya ada di Apache2\binfolder yang saya rujuk di bawah ini.

Langkah:

  1. Pastikan Anda memiliki izin menulis ke folder conf Apache Anda
  2. Buka prompt perintah di Apache2\conffolder
  3. Tipe
    ..\bin\openssl req -config openssl.cnf -new -out blarg.csr -keyout blarg.pem
  4. Anda dapat mengosongkan semua pertanyaan kecuali:

    • Frasa PEM: kata sandi sementara seperti "kata sandi"
    • Nama Umum: nama host server Anda

  5. Saat itu selesai, ketik
    ..\bin\openssl rsa -in blarg.pem -out blarg.key

  6. Hasilkan sertifikat yang Anda tandatangani sendiri dengan mengetik:
    ..\bin\openssl x509 -in blarg.csr -out blarg.cert -req -signkey blarg.key -days 365

  7. Buka conf\httpd.conffile Apache dan pastikan modul SSL diaktifkan - seharusnya tidak ada hash di awal baris ini:
    LoadModule ssl_module modules/mod_ssl.so

  8. Beberapa instalasi Apache menempatkan konfigurasi SSL dalam file terpisah. Jika demikian, pastikan bahwa file conf SSL dimasukkan. Dalam kasus saya, saya harus batalkan komentar pada baris ini:
    Include conf/extra/httpd-ssl.conf

  9. Dalam konfigurasi SSL httpd-ssl.confsaya harus memperbarui baris berikut:

    • Perbarui
      SSLSessionCache "shmcb:C:\Program Files (x86)\Zend\Apache2/logs/ssl_scache(512000)"
      ke
      SSLSessionCache "shmcb:C:/Progra\~2/Zend/Apache2/logs/ssl_scache(512000)"
      (Tanda kurung di jalur membingungkan modul, jadi kita perlu menghindarinya)
    • DocumentRoot - atur ini ke folder untuk file web Anda
    • ServerName - nama host server
    • SSLCertificateFile "conf/blarg.cert"
    • SSLCertificateKeyFile "conf/blarg.key"

  10. Mulai ulang Apache.

  11. Coba muat https://localhost/di browser Anda.

Semoga Anda berhasil sejauh ini. Jangan ragu untuk memperbarui posting ini dengan informasi bermanfaat lainnya.

(Tangkapan layar milik Neil Obremski dan artikelnya yang membantu - walaupun sekarang sudah ketinggalan zaman.)

Simon
sumber
2
Terima kasih. Saya juga harus mengedit arahan ErrorLog, TransferLog dan CustomLog ke jalur yang valid jika tidak, Apache tidak akan memulai.
Tamlyn
1
Untuk beberapa alasan, instruksi tidak berfungsi lagi atau tidak lengkap
Jacobian
6
Saya harus batalkan komentar berikut ini juga di httpd.conf saya agar bisa berfungsi: LoadModule socache_shmcb_module modules / mod_socache_shmcb.so
erik
1
Saya melakukan dua langkah lagi untuk membuatnya berfungsi, tambahkan modul LoadModule socache_shmcb_module modules / mod_socache_shmcb.so dan di httpd-ssl.conf saya memperbaiki jalur log ssl di baris 250, CustomLog ".apache24 / logs / ssl_request.log" \
Wasim A .
5
Untuk menghasilkan file .pem dan .key, saya harus menetapkan 2 variabel lingkungan pada langkah 2: mengatur OPENSSL_CONF = C: \ path \ to \ apache \ Apache2.4.4 \ conf \ openssl.cnf set RANDFILE = C: \ path \ to \ apache \ Apache2.4.4 \ conf \ .rnd
eosphere
57

Saya menggunakan ngrok ( https://ngrok.com/ ) untuk ini. ngrok adalah alat baris perintah dan membuat terowongan untuk localhost. Ini menciptakan koneksi http dan https. Setelah mengunduhnya, perintah berikut harus dijalankan:

ngrok http 80

(Dalam versi 2, sintaksnya adalah: ngrok http 80. Di versi 2, port apa pun bisa ditembus.)

Setelah beberapa detik, itu akan memberikan dua url:

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

Sekarang, kedua url mengarah ke localhost.

sudip
sumber
1
@sudip, Apakah kode opensource dari ngrok berfungsi sedemikian rupa sehingga kami dapat meng-host ini di server kami sendiri tanpa modifikasi? Jika tidak, itu cukup banyak showstopper karena tidak ok untuk mengarahkan permintaan pengguna ke host eksternal seperti ngrok.
Pacerier
2
@Pacerier Saya tidak bermaksud menggunakannya di server. Saya menggunakannya di localhost (Bcz penyedia jaringan saya memberi saya IP dinamis). Saya menggunakannya pertama kali untuk pengujian IPN paypal dan itu bekerja dengan sempurna. Saya bertanya-tanya mengapa seseorang akan menggunakannya di server dan untuk tujuan apa.
sudip
@sudip, Tujuannya jelas, Untuk memungkinkan kode yang berfungsi pada HTTP juga berfungsi dengan HTTPS tanpa perlu pengkodean tambahan.
Pacerier
1
Meskipun ini berguna, tampaknya sangat tidak aman untuk memungkinkan akses ke mesin dev Anda ke internet terbuka. Menggunakan sesuatu seperti ini akan membuat Anda dipecat di perusahaan yang sadar akan keamanan.
Andy M
@YumYumYum. Itu benar-benar gratis sebelumnya di V 1. Tapi, port http dan https masih gratis di v 2 (tidak tahu apakah ada pembatasan port apakah ada paket gratis). Periksa paket gratis di sini: ngrok.com/product#pricing
sudip
24

di sini adalah cara paling sederhana untuk melakukan ini

pertama-tama salin file server.crt & server.key ini (temukan dalam lampiran) ke direktori apache / conf / ssl Anda

kemudian buka file httpd.conf & tambahkan baris berikut

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>
Anil Gupta
sumber
3
Saya harus mengaktifkan juga modul LoadModule ssl_module libexec / apache2 / mod_ssl.so di (/etc/apache2/httpd.conf)
Alexey
17
Saya bertanya-tanya seberapa aman / berbahaya mengunduh file * .crt * .key dari sumber yang tidak dipercaya alih-alih menghasilkan file Anda sendiri.
Petr Peller
4
@PetrPeller kami menyiapkan https untuk pengembangan lokal, jadi mengapa bertanya-tanya aman / berbahaya
Anil Gupta
7
Penjelasan cara membuat file-file itu akan bagus. Karena mengunduh file dari sumber yang tidak dikenal adalah praktik yang buruk, tetapi juga karena tautan semacam itu akan rusak pada titik tertentu.
Stephan Vierkant
2
Tutorial ini baik-baik saja digitalocean.com/community/tutorials/…
Dhiraj
11

Untuk melindungi keamanan informasi yang dikirim ke dan dari server web Anda, adalah ide yang baik untuk mengaktifkan enkripsi komunikasi antara klien dan server. Ini sering disebut SSL .

Jadi mari kita atur HTTPS dengan sertifikat yang ditandatangani sendiri di Apache2. Saya akan mendaftar langkah-langkah yang harus Anda ikuti:

  • Instal apache2 web-server pada mesin Anda. Untuk mesin linux buka terminal dan ketik

sudo apt-get install apache2

  • Setelah instalasi berhasil periksa status layanan apache2 dengan menjalankan perintah

status sudo layanan apache2

Seharusnya output

status layanan apache2

  • Arahkan ke browser dan ketik

http: // localhost: 80

Pastikan Anda mendapatkan halaman default untuk apache2 seperti ini.

output default dari apache2

  • Untuk mengenkripsi koneksi web kita memerlukan sertifikat dari CA (otoritas sertifikat) atau kita dapat menggunakan sertifikat yang ditandatangani sendiri. Mari kita buat sertifikat yang ditandatangani sendiri menggunakan perintah berikut.

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

Silakan isi informasi sebagaimana ditunjukkan di bawah ini.

buat sertifikat yang ditandatangani sendiri menggunakan openssl

mykey.key dan mycert.pem harus dibuat di direktori kerja Anda saat ini.

  • Alangkah baiknya kita jika memindahkan sertifikat dan kunci di tempat yang umum dan akan mudah bagi web server apache2 untuk menemukannya. Jadi mari kita jalankan perintah berikut

sudo cp mycert.pem / etc / ssl / certs

sudo cp mykey.key / etc / ssl / private

  • Mari aktifkan mode SSL di server Anda

sudo a2enmod ssl

Seharusnya output seperti ini

aktifkan ssl

  • Mari kita mengkonfigurasi apache2 untuk menggunakan sertifikat dan kunci yang ditandatangani sendiri yang telah kita buat di atas.

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

Silakan temukan dua baris ini dan ganti dengan jalur sertifikat dan kunci Anda.

Awal

default-conf

Terakhir

setelah perubahan konfigurasi

  • Aktifkan situs

cd / etc / apache2 / sites-available /

sudo a2ensite default-ssl.conf

  • Mulai ulang layanan apache2

sudo service apache2 restart

  • Verifikasi apache2 web-server di HTTPS. Buka browser Anda lagi dan ketik

https: // localhost: 443

Seharusnya menampilkan sesuatu seperti ini dengan peringatan bahwa halaman yang akan Anda lihat tidak aman karena kami telah mengkonfigurasi server dengan sertifikat yang ditandatangani sendiri.

masukkan deskripsi gambar di sini

  • Selamat Anda telah mengkonfigurasi apache2 Anda dengan titik akhir HTTPS, sekarang klik lanjutan -> tambahkan pengecualian -> konfirmasi pengecualian keamanan , Anda akan melihat halaman default lagi.

halaman setelah menambahkan pengecualian

Dinesh Kumar
sumber
Saya lebih suka untuk tidak mengedit file konfigurasi jika saya bisa, jadi saya membiarkannya default-ssl.conf. Aku hendak mengubah nama mycertuntuk ssl-cert-snakeoiltetapi file ini sudah ada jadi saya hanya menggunakan itu! Jadi saya bisa melewati dua langkah dengan aman di Debian.
Rolf
@Rolf Saya setuju dengan Anda tetapi dalam produksi, selalu menggunakan sertifikat dan kunci baru. Jadi hanya untuk menunjukkan bagaimana mereka dapat dibuat, saya telah menambahkan 2 langkah tambahan untuk Debian. Terima kasih :)
Dinesh Kumar
9

Windows + Apache 2.4, misalnya:

  1. batalkan komentar ssl_module di httpd.conffile Anda .

    LoadModule ssl_module modules/mod_ssl.so
    
  2. dengarkan 443 port seperti 80 port di httpd.conffile Anda .

    Listen 80
    Listen 443
    
  3. batalkan komentar Termasuk host Virtual di httpd.conffile Anda .

    # Virtual hosts
    Include conf/extra/httpd-vhosts.conf
    
  4. tambahkan VirtualHost di blog Anda 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>
    

hanya nomor port 443dan SSL......garis yang berbeda dari konfigurasi http normal.

menghemat file konfigurasi Anda dan memulai kembali layanan apache. maka Anda dapat mengunjungi https: // localhost /

Peramban web akan memperingatkan Anda bahwa itu tidak aman pada saat pertama, tinggal pilih.

cuixiping
sumber
Ini berhasil bagi saya di XP Home, Apache 2.4. Menyalin 2 file sertifikat dari pos sebelumnya (oleh Anil Gupta). Mod_ssl uncommented dan termasuk httpd-vhosts.conf di httpd.conf, menambahkan arahan VirtualHost Anil Gupta (dengan beberapa jalur disesuaikan) di httpd-vhosts.conf.
jogi99
7

Ini sebenarnya cukup mudah, dengan asumsi Anda memiliki instalasi installsl berguna. (Di platform apa Anda?)

Dengan asumsi Anda menggunakan linux / solaris / mac os / x, Apache Apache SSL / TLS mini-HOWTO memiliki panduan yang sangat baik yang tidak akan saya buat di sini.

Namun, ringkasan eksekutif adalah bahwa Anda harus membuat sertifikat yang ditandatangani sendiri. Karena Anda menjalankan apache untuk localhost mungkin untuk pengembangan (yaitu bukan server web publik), Anda akan tahu bahwa Anda dapat mempercayai sertifikat yang ditandatangani sendiri dan dapat mengabaikan peringatan yang akan dilemparkan oleh browser Anda kepada Anda.

Pete Clark
sumber
Hai, saya sedang mengerjakan OS Windows. Dan untuk sertifikat yang ditandatangani sendiri, apakah saya harus mengunduhnya atau dengan cara lain?
KennC.
3
Nggak. Anda akan membuat sertifikat yang ditandatangani sendiri sendiri. Apakah Anda memiliki apache httpd + ssl setup? Anda memerlukan ssl untuk melakukan ini. Situs ini: rubayathasan.com/tutorial/apache-ssl-on-windows memiliki info bagus tentang cara menjalankan ssl di windows. Anda akan melakukan beberapa pekerjaan baris perintah, tetapi itu tetap baik untuk Anda. :-)
Pete Clark
3
Tautan sudah mati :(
kpuccino
Ya - memang terlihat sudah mati. Itu internet untuk Anda ... Namun, tautan ke CentOS Wiki di bawah ini yang dirujuk oleh @kayakinkoder juga bagus: wiki.centos.org/HowTos/Https Jika Anda menggunakan mac, langganan ini juga terlihat masuk akal: intisari. github.com/nrollr/4daba07c67adcb30693e
Pete Clark
4

Ini harus bekerja Ubuntu, Mint mirip dengan Apache2

Ini adalah panduan yang bagus, jadi ikuti ini

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

dan meninggalkan ssl.conf Anda seperti ini atau yang serupa

<VirtualHost _default_:443>
        ServerAdmin [email protected]
        ServerName localhost
        ServerAlias www.localhost.com

        DocumentRoot /var/www


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

kamu bisa mendapatkannya.

Semoga bantuan ini untuk linuxer

ackuser
sumber
2

Ini sangat sederhana,

jalankan saja perintah berikut

sudo a2enmod ssl

sudo service apache2 restart

sudo a2ensite default-ssl.conf

Itu saja, Anda sudah selesai.

Jika Anda ingin memaksakan SSL (selalu menggunakan https), edit file:

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

dan tambahkan satu baris ini

<VirtualHost *:80>
        . . .

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

        . . .
</VirtualHost>

lalu mulai kembali

sudo service apache2 restart
Moh
sumber
Dan Anda harus systemctl reload apache2mengejar sudo a2ensite default-ssl.conf.
hingga
2

Pembaruan 2019

Saya memposting jawaban ini karena saya sendiri berjuang dengan ini dan Chrome memperbarui keamanan mereka dengan memerlukan Nama Alternatif Subjek yang banyak posting tidak miliki karena tidak diperlukan ketika mereka diposting sebagai jawaban. Saya berasumsi bahwa WAMP sudah diinstal.

LANGKAH 1

Unduh OpenSSL Light dan instal


LANGKAH 2 (Opsional)

Meskipun bagian ini bersifat opsional, tetapi nantinya lebih mudah untuk mengeksekusi perintah. Jika Anda melewati langkah ini, Anda harus memberikan path lengkap ke openssl.exe tempat Anda akan menjalankan perintah. Jika Anda lebih suka mengaturnya, perbarui jalur openssl.exe di Variabel Lingkungan.

Variabel Lingkungan -> Variabel Sistem -> Jalur -> Edit -> Baru -> c: \ Program Files \ OpenSSL-Win64 \ bin


LANGKAH 3

Buat folder bernama "kunci" dic:/wamp64/bin/apache/apache2.4.27(your version number)/conf/ direktori.

Buat file konfigurasi untuk CA MyCompanyCA.cnf Anda dengan konten (Anda dapat mengubahnya sesuai kebutuhan Anda):

[ 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

Buat file konfigurasi ekstensi MyCompanyLocalhost.ext untuk sertifikat server web Anda:

subjectAltName = @alt_names
extendedKeyUsage = serverAuth

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


LANGKAH 4

Jalankan perintah ini dalam urutan yang diberikan untuk menghasilkan kunci dan sertifikat:

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

Akibatnya, Anda akan memiliki file MyCompanyCA.cer , MyCompanyLocalhost.cer dan MyCompanyLocalhost.pvk .


LANGKAH 5

Instal MyCompanyCA.cer di bawah

Control Panel -> Kelola Sertifikat Pengguna -> Otoritas Sertifikasi Root Tepercaya -> Sertifikat

Untuk menginstal MyCompanyLocalhost.cer cukup klik dua kali.


LANGKAH 6

Buka c:/wamp64/bin/apache/apache2.4.27(your version number)/conf/httpd.confdan hapus komentar (hapus tanda #) 3 baris berikut:

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


LANGKAH 7

Buka c:/wamp64/bin/apache/apache2.4.37/conf/extra/httpd-ssl.confdan ubah semua parameter ke yang ditunjukkan di bawah ini:

Directory "c:/wamp64/www"
DocumentRoot "c:/wamp64/www"
ServerName localhost:443
ServerAdmin [email protected]
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"

Catatan: Ini bagian yang sulit. Jika Anda membuat kesalahan kecil saat mengedit file ini, SSL tidak akan berfungsi. Buat salinannya sebelum Anda mengeditnya.


LANGKAH 8

Mulai ulang Wamp dan Chrome. Localhost sekarang aman: https: // localhost

CodeWarrior
sumber
1

HowTo for CentOS ini mudah diikuti dan hanya membutuhkan waktu sekitar 5 menit: https://wiki.centos.org/HowTos/Https

Saya tidak akan merinci setiap langkah di sini, tetapi langkah utamanya adalah:

1.) Instal modul openssl untuk apache, jika belum diinstal

2.) Hasilkan sertifikat yang ditandatangani sendiri

--Pada titik ini, Anda harus dapat mengunjungi https: // localhost berhasil

3.) Mengatur host virtual jika diperlukan

KayakinKoder
sumber
1

Ini bekerja pada Windows 10 dengan Apache24:

1 - Tambahkan ini di bagian bawah 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 - Tambahkan server.crtdan server.keyfile diC:/Apache24/conf/ssl folder. Lihat jawaban lain di halaman ini untuk menemukan 2 file itu.

Itu dia!

jogi99
sumber
Ya ini bekerja. Saya menggunakan langkah 1 - 3 dari StephanieQ untuk menghasilkan sertifikat dan daripada "openssl x509 -req -in server.csr -signkey server.key -out server.crt" untuk menghasilkan file * .crt dengan cygwin.
b3wii
1

tl; dr

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

Dan lingkungan lokal Anda dapat diakses dari https://youruniquesubdomain.serveo.net

Serveo adalah yang terbaik

  • Tidak ada pendaftaran.
  • Tidak menginstal
  • Memiliki HTTPS.
  • Dapat diakses di seluruh dunia.
  • Anda dapat menentukan perbaikan kustom, subdomain.
  • Anda dapat meng-host-nya sendiri, sehingga Anda dapat menggunakan domain Anda sendiri, dan menjadi bukti di masa depan, bahkan jika layanannya turun.

Saya tidak percaya ketika saya menemukan layanan ini. Ini menawarkan segalanya dan ini adalah yang termudah untuk digunakan. Jika ada alat yang mudah dan tidak menyakitkan untuk setiap masalah ...

totymedli
sumber
1

Menjalankan Apache pada Windows 10 di sini. Saya tidak bisa membuat Chrome mempercayai sertifikat yang dibuat di atas oleh Simon. Apa yang akhirnya saya lakukan adalah menggunakan PowerShell untuk menghasilkan sertifikat yang ditandatangani sendiri.

Langkah 1 - Hasilkan sertifikat yang ditandatangani sendiri

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

Langkah 2 - Konfigurasikan dan Ekspor Sertifikat

Ketik Certificateke dalam bilah pencarian Windows, klikManage Computer Certificates item panel kontrol yang disarankan.

Dari program Manajemen Sertifikat yang muncul (certlm), Anda seharusnya sekarang melihat localhostkunci di bawah Personal >> Certificates.

Saya menyalin sertifikat ini ke Trusted Root Certification Authorities. Saya akan jujur ​​karena saya tidak yakin apakah itu perlu.

Memilih sertifikat yang baru disalin, klik dua kali (sertifikat localhost). Dari modal Sertifikat, klik Detailstab, lalu tombolCopy to File... tombol.

Ini akan memunculkan dan Ekspor Wizard, saya memilih untuk mengekspor kunci pribadi, klik next. Saya juga memilih untuk Export all extended properties(sekali lagi, saya tidak yakin apakah itu perlu). Saya memilih untuk menggunakan kata sandi sederhana ( pass) dan enkripsi default. Pilih folder untuk diekspor dan beri nama file. Anda selalu dapat memindahkan dan mengganti nama file jika perlu. Demi kesederhanaan mari kita salin ke folder conf Anda di bawah instalasi Apache Anda (Dalam kasus saya:) dan beri C:\apache\confnama file myCert( file yang dihasilkan akan menjadi.pfx file)

Langkah 3 - Konversi .pfxfile untuk digunakan dengan Apache

Dari sini saya pada dasarnya mengikuti tutorial di sini , tetapi saya akan menambahkan instruksi di sini (tweak untuk pengaturan kami) jika situs tersebut turun.

Buka Prompt Perintah Anda di /apache/conf/folder
Jalankan perintah berikut: Catatan: Ini mengasumsikan Anda memiliki openssl.exedalam binfolder di folder root apache (ini harus standar / default)

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

Ini akan meminta Anda untuk kata sandi, masukkan apa yang Anda input untuk Langkah 2 ketika Anda mengekspor .pfxfile. Dalam kasus saya, ini pass. Saya memasukkan kata sandi yang sama untuk frasa PEM dan lagi untuk memverifikasi. Ini akan membuat file baru bernamaprivateKey.pem di folder conf Anda.

Lalu lari

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

Sekali lagi Anda akan dimintai kata sandi ( Enter pass phrase for privateKey.pem:), gunakan kata sandi yang Anda tentukan privateKey.pem. (Dalam kasus saya, pass)
Anda akan melihat pesan yang mengatakan writing RSA keydan file baru dipanggil private.pemdi conf/folder Anda . Ini akan menjadi SSLCertificateKeyFile Anda.

Sekarang untuk menghasilkan Sertifikat Server yang sesuai. Lari:

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

Ini akan meminta Anda untuk kata sandi, masukkan apa yang Anda input untuk Langkah 2 ketika Anda mengekspor .pfxfile. Masukkan dan Anda sekarang akan memiliki file yang disebut EntrustCert.pemdi conffolder Anda . Ini adalah SSLCertificateFile Anda

Langkah 4 - Konfigurasi httpd.conf

Gunakan file baru yang dibuat sebagai kunci dan sertifikat server Anda. Pastikan untuk mengubah root dokumen Anda ke tempat file Anda!

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>

Juga di httpd.conf:

  • Pastikan tidak LoadModule ssl_module modules/mod_ssl.sodiberi komentar (tidak# di depan)
  • Uncomment LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
  • Uncomment LoadModule http2_module modules/mod_http2.so
  • Batalkan komentar Include conf/extra/httpd-ssl.conf (CATATAN: Pastikan di situlah file berada!)

Saya juga memiliki pustaka ikal dan buka ssl termasuk:

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

Modul-modul ini seharusnya tidak perlu, tetapi saya perhatikan bahwa saya telah mengaktifkannya:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so

Langkah 5 - Konfigurasi httpd-ssl.conf

Dalam extra/folder di conf/folder Anda akan melihat file bernamahttpd-ssl.conf .

5a. UbahDocumentRoot - Ubah DocumentRootdari default ke direktori tempat file Anda berada.

5b. UbahServerName - Ubah ServerNamedari default (seperti www.example.com:443) kelocalhost:443

5c. UbahSSLCertificateFile
Ubah SSLCertificateFiledari default ( ${SRVROOT}/conf/server.crt) ke${SRVROOT}/conf/EntrustCert.pem

5c. UbahSSLCertificateKeyFile
Ubah SSLCertificateKeyFiledari default ( ${SRVROOT}/conf/server.key) ke${SRVROOT}/conf/private.pem

Secara keseluruhan, dalam <VirtualHost _default_:443>tag.

#   General setup for the virtual host
DocumentRoot "${SRVROOT}/htdocs/MYSITE"
ServerName localhost:443
ServerAdmin [email protected]
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"

Mulai ulang Apache

Setelah melakukan perubahan ini, Anda harus dapat memulai ulang Apache dan menavigasi ke https: // localhost tanpa peringatan keamanan dan gembok kecil!

Hosting lokal aman

Saya harap ini membantu seseorang! 😊

Sumber:
1.) Jawaban Auri Rahimzadeh tentang membuat sertifikat yang ditandatangani sendiri
2.) Entrust Datacard - Bagaimana cara mengonversi .pfx untuk digunakan dengan server Apache?

StephanieQ
sumber
0

Metode sederhana lain adalah menggunakan Python Server di Ubuntu.

  1. Hasilkan server.xml dengan perintah berikut di terminal:

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

    Catatan: Asumsikan Anda telah menginstal openssl .

  2. Simpan kode di bawah ini dalam file yang bernama simple-https-server.pydalam direktori apa pun yang Anda inginkan untuk menjalankan server.

    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. Jalankan server dari terminal:

    python simple-https-server.py

  4. Kunjungi halaman di:

    https://localhost:4443

Catatan tambahan ::

  1. Anda dapat mengubah port in simple-https-server.pyfile sejalan

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

  2. Anda dapat mengubah localhostIP Anda di baris yang sama di atas:

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

    dan akses halaman di perangkat apa pun yang terhubung jaringan Anda. Ini sangat berguna dalam kasus seperti "Anda harus menguji API GeoLokasi HTML5 di ponsel, dan Chrome membatasi API hanya di koneksi aman".

Intisari: https://gist.github.com/dergachev/7028596

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

Asim KT
sumber
0

Bagi mereka yang menggunakan macOS, ini adalah panduan hebat https://getgrav.org/blog/macos-sierra-apache-multiple-php-versions untuk mengatur lingkungan dev web lokal Anda. Pada bagian ke-3 https://getgrav.org/blog/macos-sierra-apache-ssl Andy Miller menjelaskan cara mengatur apache dengan sertifikat yang ditandatangani sendiri:

Ini adalah perintah utama:

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

Tetapi ada beberapa langkah yang perlu Anda ikuti, jadi periksalah dan semoga berhasil! ;)

tiomno
sumber
0

Saya ingin menambahkan sesuatu ke jawaban @CodeWarrior yang sangat bagus, yang berfungsi dengan baik di Chrome, tetapi untuk Firefox perlu langkah tambahan.

Karena Firefox tidak mendorong Sertifikat CA yang dilakukan Windows secara default, Anda harus melanjutkan about:config, gulir ke bawahsecurity.enterprise_roots.enabled dan ubah ke true.

Sekarang sertifikat Anda harus dianggap valid juga di Firefox.

Tentu saja ini hanya untuk tujuan pengembangan, karena kepercayaan ssl adalah masalah keamanan kritis dan ubah pengaturan ini hanya jika Anda mengetahui implikasinya.

RDev
sumber