|
| https://realpython.com/ |
| Start Here | https://realpython.com/start-here/ |
|
Learn Python
| https://realpython.com/videos/exploring-https-overview/ |
| Python Tutorials →In-depth articles and video courses | https://realpython.com/search?kind=article&kind=course&order=newest |
| Learning Paths →Guided study plans for accelerated learning | https://realpython.com/learning-paths/ |
| Quizzes & Exercises →Check your learning progress | https://realpython.com/quizzes/ |
| Browse Topics →Focus on a specific area or skill level | https://realpython.com/tutorials/all/ |
| Community Chat →Learn with other Pythonistas | https://realpython.com/community/ |
| Office Hours →Live Q&A calls with Python experts | https://realpython.com/office-hours/ |
| Podcast →Hear what’s new in the world of Python | https://realpython.com/podcasts/rpp/ |
| Books →Round out your knowledge and learn offline | https://realpython.com/products/books/ |
| Reference →Concise definitions for common Python terms | https://realpython.com/ref/ |
| Code Mentor →BetaPersonalized code assistance & learning tools | https://realpython.com/mentor/ |
| Unlock All Content → | https://realpython.com/account/join/ |
|
More
| https://realpython.com/videos/exploring-https-overview/ |
| Learner Stories | https://realpython.com/learner-stories/ |
| Python Newsletter | https://realpython.com/newsletter/ |
| Python Job Board | https://www.pythonjobshq.com |
| Meet the Team | https://realpython.com/team/ |
| Become a Tutorial Writer | https://realpython.com/write-for-us/ |
| Become a Video Instructor | https://realpython.com/become-an-instructor/ |
| Search | https://realpython.com/search |
| https://realpython.com/search |
| Join | https://realpython.com/account/join/ |
| Sign‑In | https://realpython.com/account/login/?next=%2Fvideos%2Fexploring-https-overview%2F |
| https://realpython.com/courses/exploring-https-cryptography/#team |
| Exploring HTTPS and Cryptography in Python | https://realpython.com/courses/exploring-https-cryptography/ |
| Christopher Trudeau | https://realpython.com/courses/exploring-https-cryptography/#team |
| Recommended Tutorial | https://realpython.com/python-https/ |
| Course Slides (.pdf) | https://realpython.com/courses/exploring-https-cryptography/downloads/https-cryptography-slides/ |
| Sample Code (.zip) | https://realpython.com/courses/exploring-https-cryptography/downloads/https-cryptography-code/ |
| Ask a Question | https://realpython.com/videos/exploring-https-overview/#discussion |
| https://realpython.com/feedback/survey/course/exploring-https-cryptography/liked/?from=lesson-title |
| https://realpython.com/feedback/survey/course/exploring-https-cryptography/disliked/?from=lesson-title |
| Contents | https://realpython.com/videos/exploring-https-overview/#description |
| Transcript | https://realpython.com/videos/exploring-https-overview/#transcript |
| Discussion | https://realpython.com/videos/exploring-https-overview/#discussion |
| Sample Code (.zip) | https://realpython.com/courses/exploring-https-cryptography/downloads/https-cryptography-code/ |
| Course Slides (.pdf) | https://realpython.com/courses/exploring-https-cryptography/downloads/https-cryptography-slides/ |
| 00:00 | https://realpython.com/videos/exploring-https-overview/#t=0.48 |
| Welcome to Exploring HTTPS and Cryptography in Python. | https://realpython.com/videos/exploring-https-overview/#t=0.48 |
| My name is Chris and I will be your guide. | https://realpython.com/videos/exploring-https-overview/#t=3.87 |
| The ultimate goal of this course is to produce some code that allows you to | https://realpython.com/videos/exploring-https-overview/#t=6.45 |
| issue certificates so that you can host your own internal HTTPS content. In | https://realpython.com/videos/exploring-https-overview/#t=9.78 |
| order to do that, | https://realpython.com/videos/exploring-https-overview/#t=15.18 |
| there’s a lot of things you need to learn along the way. First off, | https://realpython.com/videos/exploring-https-overview/#t=16.32 |
| what is HTTPS and how does it work? Secondly, | https://realpython.com/videos/exploring-https-overview/#t=19.68 |
| in order to test things over HTTPS, you’re going to need a web application, | https://realpython.com/videos/exploring-https-overview/#t=23.22 |
| so I’ll show you how to use a little bit of Flask to do that. Third, | https://realpython.com/videos/exploring-https-overview/#t=27.45 |
| moving into cryptography and how certificates work. Fourth, using Fernet ciphers as | https://realpython.com/videos/exploring-https-overview/#t=31.53 |
| a symmetric cryptography mechanism to secure your content. Fifth, | https://realpython.com/videos/exploring-https-overview/#t=37.08 |
| moving on to asymmetric cryptography. Sixth, how to actually use Python to write a | https://realpython.com/videos/exploring-https-overview/#t=41.4 |
| Certificate Authority. Seventh, | https://realpython.com/videos/exploring-https-overview/#t=47.19 |
| how to combine all of this into an HTTPS Flask application. | https://realpython.com/videos/exploring-https-overview/#t=49.62 |
| 00:54 | https://realpython.com/videos/exploring-https-overview/#t=54.21 |
| And finally, looking at other ways of approaching the same problem. | https://realpython.com/videos/exploring-https-overview/#t=54.21 |
| 00:58 | https://realpython.com/videos/exploring-https-overview/#t=58.95 |
| The code samples inside of this course were tested using Python 3.8, Flask 1.1, | https://realpython.com/videos/exploring-https-overview/#t=58.95 |
| requests 2.23, and cryptography 2.9. | https://realpython.com/videos/exploring-https-overview/#t=64.26 |
| Other versions should work equally well, | https://realpython.com/videos/exploring-https-overview/#t=68.76 |
| but if you’re running into weird inconsistencies, | https://realpython.com/videos/exploring-https-overview/#t=71.01 |
| always remember to check your versions. | https://realpython.com/videos/exploring-https-overview/#t=73.41 |
| 01:16 | https://realpython.com/videos/exploring-https-overview/#t=76.56 |
| As this course uses outside libraries, | https://realpython.com/videos/exploring-https-overview/#t=76.56 |
| such as Flask and Python cryptography, | https://realpython.com/videos/exploring-https-overview/#t=79.05 |
| it’s expected that you have a basic understanding of pip and virtual | https://realpython.com/videos/exploring-https-overview/#t=81.9 |
| environments and be able to install these packages. Great! Let’s get started. | https://realpython.com/videos/exploring-https-overview/#t=85.05 |
| 01:30 | https://realpython.com/videos/exploring-https-overview/#t=90.21 |
| So, what’s HTTP? HTTP is the protocol that’s used between your web browser and a | https://realpython.com/videos/exploring-https-overview/#t=90.21 |
| server to get content. First off, you type a URL into your browser. | https://realpython.com/videos/exploring-https-overview/#t=95.7 |
| 01:41 | https://realpython.com/videos/exploring-https-overview/#t=101.55 |
| Your computer opens up a TCP/IP socket to the hostname. That host comes from the | https://realpython.com/videos/exploring-https-overview/#t=101.55 |
| first part of the URL. If you type in example.com | https://realpython.com/videos/exploring-https-overview/#t=107.22 |
| it looks up the host example.com. HTTP traffic, by default, is on port 80, | https://realpython.com/videos/exploring-https-overview/#t=110.7 |
| so your web browser automatically opens port 80 to the server. | https://realpython.com/videos/exploring-https-overview/#t=116.25 |
| 02:00 | https://realpython.com/videos/exploring-https-overview/#t=120.48 |
| Once a connection is established, | https://realpython.com/videos/exploring-https-overview/#t=120.48 |
| the computer uses this connection to send an HTTP request. | https://realpython.com/videos/exploring-https-overview/#t=122.04 |
| This request tells the server what content it’s looking for. | https://realpython.com/videos/exploring-https-overview/#t=126.9 |
| 02:11 | https://realpython.com/videos/exploring-https-overview/#t=131.1 |
| Your browser uses the second part of the URL—in this case /kittens.html— | https://realpython.com/videos/exploring-https-overview/#t=131.1 |
| to tell the server that it’s looking for the /kittens content. | https://realpython.com/videos/exploring-https-overview/#t=134.77 |
| 02:20 | https://realpython.com/videos/exploring-https-overview/#t=140.7 |
| It also tells it that it was asking example.com. | https://realpython.com/videos/exploring-https-overview/#t=140.7 |
| It does this so that if the web server is hosting multiple domains, | https://realpython.com/videos/exploring-https-overview/#t=143.94 |
| it knows which one you connected to. Finally, | https://realpython.com/videos/exploring-https-overview/#t=147.39 |
| the Accept parameter tells the server what kind of content that can come back. | https://realpython.com/videos/exploring-https-overview/#t=150.54 |
| 02:34 | https://realpython.com/videos/exploring-https-overview/#t=154.47 |
| The simplest of this is “Give me any content you have.” | https://realpython.com/videos/exploring-https-overview/#t=154.47 |
| 02:39 | https://realpython.com/videos/exploring-https-overview/#t=159.51 |
| An HTTP request is broken down into a series of parts. | https://realpython.com/videos/exploring-https-overview/#t=159.51 |
| The first part is the method. The example I just gave you was | https://realpython.com/videos/exploring-https-overview/#t=162.87 |
| GET. A common one is also a POST. GET is used for retrieving content. | https://realpython.com/videos/exploring-https-overview/#t=166.47 |
| 02:51 | https://realpython.com/videos/exploring-https-overview/#t=171.84 |
| POST is for sending content to the server, such as submitting a form. | https://realpython.com/videos/exploring-https-overview/#t=171.84 |
| There are other methods as well, but we’ll skip over those for now. Secondly, | https://realpython.com/videos/exploring-https-overview/#t=176.1 |
| the path tells the server what content to fetch. In the example | https://realpython.com/videos/exploring-https-overview/#t=181.06 |
| before, this was /kittens.html. | https://realpython.com/videos/exploring-https-overview/#t=184.93 |
| 03:08 | https://realpython.com/videos/exploring-https-overview/#t=188.26 |
| The request should also include the HTTP version. | https://realpython.com/videos/exploring-https-overview/#t=188.26 |
| There are multiple versions of HTTP. This is the browser telling the server | https://realpython.com/videos/exploring-https-overview/#t=191.47 |
| what version of the protocol that it wishes to speak. Most commonly, | https://realpython.com/videos/exploring-https-overview/#t=195.61 |
| this is still version 1.1. Although version 1.0 is still around, | https://realpython.com/videos/exploring-https-overview/#t=199.78 |
| 2.0 is becoming increasingly common and 3.0 is actively supported by most of | https://realpython.com/videos/exploring-https-overview/#t=204.88 |
| the popular browsers. In addition to these pieces, | https://realpython.com/videos/exploring-https-overview/#t=209.26 |
| the HTTP request can also include additional headers. | https://realpython.com/videos/exploring-https-overview/#t=212.62 |
| 03:36 | https://realpython.com/videos/exploring-https-overview/#t=216.58 |
| These headers give more information to the server. | https://realpython.com/videos/exploring-https-overview/#t=216.58 |
| Some common examples are Accept, which you saw in the previous— | https://realpython.com/videos/exploring-https-overview/#t=219.4 |
| the browser telling the server what kind of content it can take. | https://realpython.com/videos/exploring-https-overview/#t=223.9 |
| 03:48 | https://realpython.com/videos/exploring-https-overview/#t=228.04 |
| Cookies are a way for the browser and the server to keep common content through | https://realpython.com/videos/exploring-https-overview/#t=228.04 |
| multiple connections. | https://realpython.com/videos/exploring-https-overview/#t=232.42 |
| The Cookie header is the browser telling the server that the last time they | https://realpython.com/videos/exploring-https-overview/#t=233.98 |
| spoke, | https://realpython.com/videos/exploring-https-overview/#t=237.94 |
| the server asked the browser to send this information back up on the next visit. | https://realpython.com/videos/exploring-https-overview/#t=238.72 |
| 04:04 | https://realpython.com/videos/exploring-https-overview/#t=244.24 |
| This is how cookies and state work. As I mentioned in the example, | https://realpython.com/videos/exploring-https-overview/#t=244.24 |
| the Host is the domain name of the server for multi-domain hosting. | https://realpython.com/videos/exploring-https-overview/#t=248.68 |
| The User-Agent header identifies the browser that is visiting the server. | https://realpython.com/videos/exploring-https-overview/#t=252.57 |
| 04:17 | https://realpython.com/videos/exploring-https-overview/#t=257.829 |
| This is just text, and some browsers even allow you to fake this out. | https://realpython.com/videos/exploring-https-overview/#t=257.829 |
| And finally, if you’re doing a POST, | https://realpython.com/videos/exploring-https-overview/#t=262.48 |
| you also have to include the body in the HTTP request. | https://realpython.com/videos/exploring-https-overview/#t=265.51 |
| 04:29 | https://realpython.com/videos/exploring-https-overview/#t=269.08 |
| This is the content being sent to the server. If you’re submitting a form, | https://realpython.com/videos/exploring-https-overview/#t=269.08 |
| this would be the key-value pairs of the fields in the form. | https://realpython.com/videos/exploring-https-overview/#t=273.07 |
| 04:37 | https://realpython.com/videos/exploring-https-overview/#t=277.84 |
| Once the HTTP request has gone to the server, | https://realpython.com/videos/exploring-https-overview/#t=277.84 |
| it’s now time for the server to reply back. | https://realpython.com/videos/exploring-https-overview/#t=280.21 |
| 04:44 | https://realpython.com/videos/exploring-https-overview/#t=284.14 |
| This is an HTTP response. | https://realpython.com/videos/exploring-https-overview/#t=284.14 |
| The two main parts of this are a status code—in this case, | https://realpython.com/videos/exploring-https-overview/#t=286.66 |
| 200, telling the browser the content was served fine— | https://realpython.com/videos/exploring-https-overview/#t=290.35 |
| and then some information about what the content type is. For kittens.html, | https://realpython.com/videos/exploring-https-overview/#t=294.64 |
| it’s going to be some HTML. Attached to this, then, is the body— | https://realpython.com/videos/exploring-https-overview/#t=300.22 |
| the body being the HTML that’s being served. Now, the kitten’s adorable, | https://realpython.com/videos/exploring-https-overview/#t=305.14 |
| but I’ve skipped over a step. Images actually don’t come down in the first hit. | https://realpython.com/videos/exploring-https-overview/#t=310.75 |
| 05:16 | https://realpython.com/videos/exploring-https-overview/#t=316.06 |
| So if you hit kittens.html, | https://realpython.com/videos/exploring-https-overview/#t=316.06 |
| you would get back an HTML document. That HTML document would have references in | https://realpython.com/videos/exploring-https-overview/#t=317.98 |
| it, one of which might be an image of a kitten. | https://realpython.com/videos/exploring-https-overview/#t=323.14 |
| 05:26 | https://realpython.com/videos/exploring-https-overview/#t=326.11 |
| The browser would then send another HTTP request for the image of the kitten, and | https://realpython.com/videos/exploring-https-overview/#t=326.11 |
| the server would then respond with that image. This is a multistep process. | https://realpython.com/videos/exploring-https-overview/#t=331.54 |
| 05:37 | https://realpython.com/videos/exploring-https-overview/#t=337.42 |
| The HTTP response itself always contains the version number. | https://realpython.com/videos/exploring-https-overview/#t=337.42 |
| This is to confirm the version of the protocol that the server is speaking. | https://realpython.com/videos/exploring-https-overview/#t=341.44 |
| Normally this is the same version as was included by the browser in the HTTP | https://realpython.com/videos/exploring-https-overview/#t=345.52 |
| request. | https://realpython.com/videos/exploring-https-overview/#t=350.41 |
| 05:52 | https://realpython.com/videos/exploring-https-overview/#t=352.0 |
| The status code is a numeric code indicating the success or error of the call. | https://realpython.com/videos/exploring-https-overview/#t=352.0 |
| Some ones are 200, indicating it was successful, | https://realpython.com/videos/exploring-https-overview/#t=356.68 |
| 404, saying the path you asked for is not found, or 500, indicating | https://realpython.com/videos/exploring-https-overview/#t=360.11 |
| something went wrong on the server-side. Just like the request, | https://realpython.com/videos/exploring-https-overview/#t=365.54 |
| the response can include additional headers giving metadata about the response. | https://realpython.com/videos/exploring-https-overview/#t=369.41 |
| 06:14 | https://realpython.com/videos/exploring-https-overview/#t=374.84 |
| Some common examples are Content-Encoding, indicating what kind of content the | https://realpython.com/videos/exploring-https-overview/#t=374.84 |
| body has and how it is encoded, Content-Length, | https://realpython.com/videos/exploring-https-overview/#t=379.88 |
| the amount of information in the body, in bytes, Server, | https://realpython.com/videos/exploring-https-overview/#t=383.42 |
| identifying the web server that is serving the content, and Set-Cookie. | https://realpython.com/videos/exploring-https-overview/#t=388.58 |
| 06:33 | https://realpython.com/videos/exploring-https-overview/#t=393.74 |
| This corresponds to the Cookie header in the request. | https://realpython.com/videos/exploring-https-overview/#t=393.74 |
| This is the server requesting that the browser— | https://realpython.com/videos/exploring-https-overview/#t=396.92 |
| the next time it connects to the server—sends up information | https://realpython.com/videos/exploring-https-overview/#t=399.23 |
| that’s encoded inside of this header. | https://realpython.com/videos/exploring-https-overview/#t=402.83 |
| 06:45 | https://realpython.com/videos/exploring-https-overview/#t=405.26 |
| This allows the server to keep state between connections. Finally, | https://realpython.com/videos/exploring-https-overview/#t=405.26 |
| the response is no good without the body. | https://realpython.com/videos/exploring-https-overview/#t=410.09 |
| The body is the actual content to be displayed. | https://realpython.com/videos/exploring-https-overview/#t=412.22 |
| 06:55 | https://realpython.com/videos/exploring-https-overview/#t=415.4 |
| This is usually HTML, images, JavaScript, or CSS. | https://realpython.com/videos/exploring-https-overview/#t=415.4 |
| 07:00 | https://realpython.com/videos/exploring-https-overview/#t=420.41 |
| So, that’s HTTP. What’s HTTPS? Well, | https://realpython.com/videos/exploring-https-overview/#t=420.41 |
| the S is for secure. The web is used for all sorts of transactions, nowadays, | https://realpython.com/videos/exploring-https-overview/#t=424.61 |
| that should be considered private: E-com, banking, authentication. | https://realpython.com/videos/exploring-https-overview/#t=429.17 |
| 07:13 | https://realpython.com/videos/exploring-https-overview/#t=433.49 |
| Instead of creating a new protocol, | https://realpython.com/videos/exploring-https-overview/#t=433.49 |
| HTTPS is just HTTP over an encrypted channel. | https://realpython.com/videos/exploring-https-overview/#t=435.44 |
| TLS is a way of encrypting that channel. Older versions also used SSL, | https://realpython.com/videos/exploring-https-overview/#t=440.03 |
| but for the sake of the course, | https://realpython.com/videos/exploring-https-overview/#t=445.7 |
| I’m going to concentrate on TLS. Because TLS is used to create a generic | https://realpython.com/videos/exploring-https-overview/#t=446.9 |
| encrypted channel, this means it can be used for all sorts of protocols, | https://realpython.com/videos/exploring-https-overview/#t=452.3 |
| including email, IM, and VoIP. | https://realpython.com/videos/exploring-https-overview/#t=456.11 |
| 07:39 | https://realpython.com/videos/exploring-https-overview/#t=459.11 |
| This separates the concerns between the encryption and the protocol being used | https://realpython.com/videos/exploring-https-overview/#t=459.11 |
| over the encryption. | https://realpython.com/videos/exploring-https-overview/#t=463.43 |
| Let’s look at an HTTPS connection. Like before, you type in the URL, | https://realpython.com/videos/exploring-https-overview/#t=465.5 |
| this time with the s on the end of https. | https://realpython.com/videos/exploring-https-overview/#t=471.26 |
| 07:55 | https://realpython.com/videos/exploring-https-overview/#t=475.46 |
| A socket is connected to the server. The port, notice, is different. | https://realpython.com/videos/exploring-https-overview/#t=475.46 |
| The default port for web is 80. | https://realpython.com/videos/exploring-https-overview/#t=480.11 |
| The default port for TLS is 443, | https://realpython.com/videos/exploring-https-overview/#t=482.69 |
| so when you type in https into your browser, the browser uses port 443 | https://realpython.com/videos/exploring-https-overview/#t=486.17 |
| to connect to the server. The default nowadays, | https://realpython.com/videos/exploring-https-overview/#t=491.0 |
| if you don’t type in the schema, is to use HTTPS in order to try and make sure | https://realpython.com/videos/exploring-https-overview/#t=494.51 |
| that your connection is secure. Once the socket is established, | https://realpython.com/videos/exploring-https-overview/#t=499.46 |
| TLS protocol is connected over that socket. | https://realpython.com/videos/exploring-https-overview/#t=504.17 |
| 08:28 | https://realpython.com/videos/exploring-https-overview/#t=508.31 |
| This is the encryption channel. Within that encryption channel, HTTP is then used | https://realpython.com/videos/exploring-https-overview/#t=508.31 |
| to communicate to the server. This is the same as the previous example, | https://realpython.com/videos/exploring-https-overview/#t=514.19 |
| just inside of the TLS channel. Throughout this course, | https://realpython.com/videos/exploring-https-overview/#t=518.15 |
| I’m going to be using a command-line browser called curl. curl comes for free in | https://realpython.com/videos/exploring-https-overview/#t=522.559 |
| Mac, Linux, and Windows distributions now. | https://realpython.com/videos/exploring-https-overview/#t=527.48 |
| 08:50 | https://realpython.com/videos/exploring-https-overview/#t=530.84 |
| If you’re using a slightly older version of Windows 10—before the 1803 build— | https://realpython.com/videos/exploring-https-overview/#t=530.84 |
| you may have to go off to the web to download it, | https://realpython.com/videos/exploring-https-overview/#t=535.14 |
| but otherwise, it’s there. In its simplest form, you type curl | https://realpython.com/videos/exploring-https-overview/#t=537.18 |
| and the URL that you’re going to. | https://realpython.com/videos/exploring-https-overview/#t=541.62 |
| 09:05 | https://realpython.com/videos/exploring-https-overview/#t=545.52 |
| What comes back is the content. | https://realpython.com/videos/exploring-https-overview/#t=545.52 |
| This is my own personal website with the world’s smallest HTML document, | https://realpython.com/videos/exploring-https-overview/#t=548.04 |
| essentially just saying Hello world! | https://realpython.com/videos/exploring-https-overview/#t=551.91 |
| 09:15 | https://realpython.com/videos/exploring-https-overview/#t=555.27 |
| By using the -I parameter, | https://realpython.com/videos/exploring-https-overview/#t=555.27 |
| you can look at the headers coming back from the server. In this case, | https://realpython.com/videos/exploring-https-overview/#t=557.19 |
| HTTP […] 200, content-type: text/html, | https://realpython.com/videos/exploring-https-overview/#t=561.24 |
| and the fact that I’m using Cloudflare to front the server. | https://realpython.com/videos/exploring-https-overview/#t=564.96 |
| 09:28 | https://realpython.com/videos/exploring-https-overview/#t=568.17 |
| This is actually how I get my HTTPS certificate—Cloudflare’s doing it for me. | https://realpython.com/videos/exploring-https-overview/#t=568.17 |
| The -I parameter only shows the headers that come back. | https://realpython.com/videos/exploring-https-overview/#t=572.91 |
| You can use --include, instead, to see both the headers and the content. | https://realpython.com/videos/exploring-https-overview/#t=577.35 |
| 09:42 | https://realpython.com/videos/exploring-https-overview/#t=582.66 |
| I’m going to combine this with -v, for verbose, | https://realpython.com/videos/exploring-https-overview/#t=582.66 |
| to see all of the details that happen with a TLS connection. | https://realpython.com/videos/exploring-https-overview/#t=586.11 |
| 09:51 | https://realpython.com/videos/exploring-https-overview/#t=591.72 |
| Here it comes… | https://realpython.com/videos/exploring-https-overview/#t=591.72 |
| 09:57 | https://realpython.com/videos/exploring-https-overview/#t=597.33 |
| and here’s a whole bunch of debug information. It connects to the server. | https://realpython.com/videos/exploring-https-overview/#t=597.33 |
| It tells us that it wishes to speak | https://realpython.com/videos/exploring-https-overview/#t=601.44 |
| TLS. Handshake goes back and forth with some certificate exchange. | https://realpython.com/videos/exploring-https-overview/#t=603.27 |
| 10:08 | https://realpython.com/videos/exploring-https-overview/#t=608.94 |
| Next up, the secure connection is confirmed | https://realpython.com/videos/exploring-https-overview/#t=608.94 |
| and a certificate comes back from the server, telling the browser who it is. | https://realpython.com/videos/exploring-https-overview/#t=612.06 |
| The browser confirms the certificate through one of its known Certificate | https://realpython.com/videos/exploring-https-overview/#t=616.35 |
| Authorities and then—because it passes—establishes the connection. | https://realpython.com/videos/exploring-https-overview/#t=620.07 |
| 10:25 | https://realpython.com/videos/exploring-https-overview/#t=625.29 |
| In this case, it’s using HTTP2 over the TLS connection. | https://realpython.com/videos/exploring-https-overview/#t=625.29 |
| 10:31 | https://realpython.com/videos/exploring-https-overview/#t=631.14 |
| The next part is the actual GET—from curl to the browser— | https://realpython.com/videos/exploring-https-overview/#t=631.14 |
| using HTTP2, asking for the /helloworld.html document. | https://realpython.com/videos/exploring-https-overview/#t=635.58 |
| 10:41 | https://realpython.com/videos/exploring-https-overview/#t=641.58 |
| The connection state changes, and finally, | https://realpython.com/videos/exploring-https-overview/#t=641.58 |
| the response comes back from the server using status code 200 and the actual | https://realpython.com/videos/exploring-https-overview/#t=644.76 |
| body connected to it. | https://realpython.com/videos/exploring-https-overview/#t=649.56 |
| 10:52 | https://realpython.com/videos/exploring-https-overview/#t=652.2 |
| And that’s everything involved in asking for helloworld.html over HTTPS. | https://realpython.com/videos/exploring-https-overview/#t=652.2 |
| 10:58 | https://realpython.com/videos/exploring-https-overview/#t=658.65 |
| Next up, | https://realpython.com/videos/exploring-https-overview/#t=658.65 |
| I’m going to show you how to use Flask to build a simple web server application. | https://realpython.com/videos/exploring-https-overview/#t=659.31 |
| Become a Member | https://realpython.com/account/join/ |
| Overview | https://realpython.com/courses/exploring-https-cryptography/ |
| https://realpython.com/videos/write-simple-server/ |
|
Exploring HTTPS and Cryptography in Python (Overview) 11:05
| https://realpython.com/videos/exploring-https-overview/ |
|
Writing a Simple Server 10:20
| https://realpython.com/videos/write-simple-server/ |
|
A Brief Introduction to Cryptography 13:34
| https://realpython.com/lessons/brief-intro-cryptography/ |
|
Using Fernet Ciphers to Secure Your Content 05:46
| https://realpython.com/lessons/using-fernet-ciphers/ |
|
Exchanging Asymmetric Keys 12:56
| https://realpython.com/lessons/asymmetric-keys/ |
|
Creating Public and Private Keys 16:28
| https://realpython.com/lessons/public-private-keys/ |
|
Coding Like a Certificate Authority 09:32
| https://realpython.com/lessons/coding-like-a-ca/ |
|
Hosting HTTPS With Flask 04:03
| https://realpython.com/lessons/hosting-https-flask/ |
|
Exploring HTTPS and Cryptography in Python (Summary) 04:37
| https://realpython.com/lessons/exploring-https-summary/ |
| Privacy Policy | https://realpython.com/privacy-policy/ |
Viewport: width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover