11 ms·
FFS SSL
- madsushi 12y agoWith StartSSL, you can actually generate your own key via OpenSSL (and you should) and then use that instead of doing it in the browser.
- antsar 12y agoIt is, however, ridiculous that DigitalOcean (a quite popular VPS provider) advises innocent webmasters to generate it in the browser with no mention of how insecure this is. https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-with-a-free-signed-ssl-certificate-on-a-vps https://www.digitalocean.com/community/tutorials/how-to-set-...
- basher 12y agoIt's a community contributed article - shame DigitalOcean didn't audit it properly though.
- Dylan16807 12y agoIf StartSSL gets hacked you are in a bad place no matter what. And you're more likely to screw up key safety yourself than for that narrow window to be exploited. I don't think it's ridiculous.
- antsar 12y agoI agree that there's a very slim chance, realistically, of this being exploited. But StartSSL doesn't have to be hacked for a user to be MITM'ed and served malicious JS. Especially given that their site (at least the homepage) loads over plain HTTP.
- trey-jones 12y agoI've had no problem using startssl for personal projects. Free trusted certificates, and as madsushi says you should generate your own key and csr, just as you would for any premium certificate authority.
- AceJohnny2 12y agoWhile trying to look it up myself: * StartSSL.com itself doesn't use SSL, so it could be hijacked * I get a TLS fail (ssl_error_handshake_failure_alert) on https://auth.startssl.com https://auth.startssl.com on Firefox 32 I'd call the first a red flag, the second a critical fail. This is the entry point to SSL on the web?
- pixl97 12y agoAny input action that you do on their site will direct you to SSL. Though they should probably use HSTS and redirect all their users before hand. >I get a TLS fail (ssl_error_handshake_failure_alert) That happens to me when I am on one particular provider myself. It concerns me that those providers are doing something with https connections causing them to break on their site.
- feld 12y ago... does nobody here understand what StartSSL is doing? Guys, they're giving you a certificate to identify yourself with. You add it in your browser. You go to their website, and you don't need a username or password to login. This certificate is much more secure than normal credentials. Is the concept of authentication without a username+password that lost on you? It's like an SSH key except your username is embedded in it, too. I fear for the future of internet security.
- AceJohnny2 12y agoHuh, I missed that. Thanks for pointing this out. I had used StartSSL years ago and forgot about this. Not reading all the text, I expected the usual login/password prompt and hoped for a "reset password" form. Getting a browser SSL error interrupted that flow. Now that I know, it makes more sense, but I'm going to take the position that this is a UX fail. Whether the browser's (which didn't even prompt me for a cert) or StartSSL (who could've made this clearer), I don't know.
- evandena 12y agoSounds like you should be using Blogger or some other hosted platform.
- claar 12y agoNo need for that word in the headline.
- Zikes 12y agoNo need to get offended by it, either.
- blahyawnblah 12y agoWe're adults and on the internet, it's OK.
- deleted 12y ago[deleted]
- IvyMike 12y agoNote for clarity: claar's complaint was prior to a headline edit; "FFS" used to say "For Fuck's Sake".
- Zikes 12y agoWhich was undoubtedly changed to more closely match the actual article title, rather than for censorship/family-friendliness reasons.
- yourabi 12y agoYep - getting this right is hard. Couple of points about the article. Browsers verify SSL certificates for revocation (OCSP). This is an ongoing service that has a direct impact on latency - so SSL is an ongoing service very much like DNS. However, most people don't realize this. Also you send in a CSR - certificate signing request - not CRT (which is usually short-hand for certificate). Also it gets worse - A recent OpenSSL vulnerability would still allow SSLv3 even if it was configured with "no-ssl3": https://www.openssl.org/news/secadv_20141015.txt https://www.openssl.org/news/secadv_20141015.txt This is why I built https://snitch.io https://snitch.io - security and SSL secured sites in particular are moving targets and not "fire and forget". You really need an external process monitoring and auditing your secured site.
- jtokoph 12y agoRe: snitch.io Have you considered somehow providing a demo of what I might see for my domain?
- yourabi 12y agoHi! The screenshots show you what the app looks like. And to your point all accounts come with a free 14-day trial. I may eventually add a free "one-off" audit - but the value in a service like Snitch is that something is constantly monitoring and alerting. Happy to answer any other questions - you can email me anytime. This username at gmail or currylabs.com
- function_seven 12y ago> Browsers verify SSL certificates for revocation (OCSP). This is an ongoing service that has a direct impact on latency - so SSL is an ongoing service very much like DNS. However, most people don't realize this. Inconsistently and sporadically, it seems: http://news.netcraft.com/archives/2014/04/24/certificate-revocation-why-browsers-remain-affected-by-heartbleed.html http://news.netcraft.com/archives/2014/04/24/certificate-rev... That article is a few months old though. Have Firefox/Chrome changed their tune due to Heartbleed?
- 12y ago
- Pxtl 12y agoWhat flabbergasts me is how much of this is what the gaming world would call "push this button not to die". That is, it's a question with a right answer and a wrong answer and no real other options or any reason you'd ever want to choose the "wrong" option. Intelligent defaults are supposed to take care of that sort of thing.
- yourabi 12y agoIt is rarely that clean-cut which is why these are not defaults in server configs. If you're hosting an API that has older / embedded clients you may HAVE to support SSLv3 during a migration plan...etc
- pixl97 12y agoYour defaults would change every few months. BEAST attack comes out... Use RC4. Not long after.. RC4 is weak use GCM. GCM isn't supported on older versions of almost everything. Upgrade servers to 2012R2, latest versions of Linux, throw away your old phones, check out your legacy devices... Security isn't a question with a right or wrong answer, it's a question with the best answer for the available information and the clients you have at the time. And those answers are changing daily with all the research being conducted.
- skybrian 12y agoAll the more reason for someone who's on top of things to fix the defaults whenever they change.
- pixl97 12y agoWhile that would be nice, it doesn't fix the problem, that problem is If you are administering SSL enabled sites, you MUST keep track of latest security practices Why is that? If you add a new server with different defaults, do you a) update all the other servers to the new defaults, or b) set the new server to your existing configuration. Most server applications don't change defaults between minor versions because it leads to even worse problems. Such as users not updating because their application breaks and keeping old bugs alive.
- j_s 12y agotells you how to use StartSSL, which generates the key in your browser. Whoops, your private key is now known to another server on this internet Pardon my ignorance, but I thought the in-browser certificate creation process avoids sending the private key. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/keygen https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ke... http://www.jroller.com/whoami/entry/browser_generated_certificate_requests http://www.jroller.com/whoami/entry/browser_generated_certif... (2006)
- yourabi 12y agoYou should never send a private key. Private keys are private. That is a poorly written tutorial - written by someone that may not understand PKI. You generate the CSR and send that.
- wolf550e 12y agoIn this case you are trusting the javascript running in the browser that it does not leak the key it generated. It is safer to just not let the browser ever see the private key.
- MatthewWilkes 12y agokeypair generation is done by the browser using the <keygen /> element, not by custom JS.
- kbuck 12y agoConfiguring things is hard, and if you rely on Google to give you magic commands to execute instead of learning about what you're doing, you can really mess up. If you don't have the time to spend properly administrating a system, don't do it; use a hosted platform so that someone else (who knows what they're doing) does it for you.
- michaelbuckbee 12y agoIt's even worse than that as even if all the above is actually correct and done perfectly that you may still not get the "green" depending on the browser as the browser makers are moving to showing domain validated (via email) certificates as gray and only EV (extended validation) certs as green. Things to note: EV certs are much more expensive. You cannot get a cert that is both EV and a Wildcard, single domains only. Screenshots of how the various browsers show Domain vs EV certs at: https://www.expeditedssl.com/pages/visual-security-browser-ssl-icons-and-design https://www.expeditedssl.com/pages/visual-security-browser-s...
- basher 12y agoTotally agree with the article, certs are a the biggest money making racket out there, and a pain in the ass. Certs should be issued with the domain by default no extra cost.
- wolf550e 12y agoUnless I missed it, article does not say "use https://www.ssllabs.com/ssltest/ https://www.ssllabs.com/ssltest/ to test your setup", which I think is very useful advice. Also, you might consider configuring your server to only support cipher suites that will be supported by TLS 1.3 [0][1] and let old clients get errors. If you need security, don't use the obsolete stuff the experts don't trust anymore. 0 - https://tlswg.github.io/tls13-spec/#rfc.section.1.2 https://tlswg.github.io/tls13-spec/#rfc.section.1.2 1 - This means use only (ECDHE|DHE)-(RSA|ECDSA)-AES128-GCM-SHA256 and (ECDHE|DHE)-(RSA|ECDSA)-AES256-GCM-SHA384. No key exchanges that don't provide forward secrecy, no RC4, no CBC mode, no MD5, no SHA1.
- AlyssaRowan 12y agoYou can add (ECDHE|DHE)-(RSA|ECDSA)-CHACHA20-POLY1305 to that too (pretty soon).
- iancarroll 12y agoIf you don't care about OCSP stapling, you can use BoringSSL and get that cipher today! ex: https://time.ian.sh https://time.ian.sh
- grahamedgecombe 12y agoAnd LibreSSL also has support for ChaCha20.
- wolf550e 12y agoWhen the standard adds the feature that enables using AES GCM when both sides have an implementation that is fast and resistant to timing attacks and falls back to chacha20-poly1305 when they don't [0], and the chacha20-poly1305 cipher suite itself is standardized, then we should all add that. 0 - https://www.imperialviolet.org/2014/02/27/tlssymmetriccrypto.html https://www.imperialviolet.org/2014/02/27/tlssymmetriccrypto...
- agwa 12y agoThis raises an issue that has been troubling me recently. There has been an explosion in guides that tell you how to secure your TLS installation, and virtually all of them hard code a cipher list, which I fear won't get refreshed as better ciphers come out. I've also seen this with recent instructions to disable SSLv3, which whitelist TLSv1, TLSv1.1, and TLSv1.2, instead of just blacklisting SSLv2 and SSLv3. To avoid a situation where future security improvements are held back by crufty configuration that was added in a well-intended effort to improve present-day security, I think we should be encouraging blacklists instead; the OpenSSL cipher list spec actually supports blacklisting.
- agwa 12y agoThe state of things really does suck, and I'm trying to do something about it. SSLMate [https://sslmate.com https://sslmate.com] sells SSL certs from the command line for $15.95/year. The sslmate command line tool takes care of properly generating the key and CSR, and properly assembling the certificate bundle containing the chain certificate. Certificates secure both example.com and www.example.com. No more hard-to-use websites or obscure openssl commands. I'm working on a config file generator too, so you'll be able to specify your server software and it will output a secure config for you. And since the author mentioned out-of-process SSL termination, I'm also the author of titus [https://www.opsmate.com/titus/ https://www.opsmate.com/titus/], an SSL terminator that is so paranoid it stores the private key in an isolated process (which would have been impervious to Heartbleed). It also solves the original IP address problem by using Linux's transparent proxy support - your web server sees the client's actual IP address even though the connection was proxied through titus.
- joshstrange 12y agoShut up and take my money. I had to jump through so many hoops when I setup SSL about a year ago that I almost just gave up. I have your site bookmarked and next time I need to setup SSL I will be using your service. It looks really easy and how I would expect SSL certs to work.
- nknighthb 12y agoI hope we see more key isolation going on in the near future even where titus is overkill. Process-per-connection tends to cross the cost-benefit threshold for high-traffic/low-to-medium importance stuff, but key compromise is a giant pain in the ass no matter what you're doing. On the other hand, if you want to go further into tinfoil-hat territory, find a way to isolate each process in a separate container. :) (Bonus points: Tear down/rebuild the container for each new connection.)
- agwa 12y agoThere's definitely overhead to the process-per-connection approach, but I disagree that protecting the key is more important then protecting the state of the connection. A private key is just a means to the end of securing a connection, and what terrified me most during Heartbleed wasn't the private key compromises, but the fact that it exposed private user data like passwords: https://twitter.com/markloman/status/453502888447586304/photo/1 https://twitter.com/markloman/status/453502888447586304/phot... (there was probably other sensitive content like emails in that dump too) This kind of information is far more useful to attackers, since it can be used immediately and independently, whereas a compromised private key is only useful in conjunction with an active MitM attack (if forward secrecy is used) or a passive eavesdropping attack (if forward secrecy is not used). As for containers, titus is already using a lot of container-like techniques, such as filesystem and network isolation, and I plan to use PID namespaces in a future version. So it's probably already deep in tinfoil-hat territory ;-)
- michaelmior 12y ago> So if you're Google, you friggin add your name to a static list in the browser. It's worth noting that the Chromium project accepts URLs for inclusion into the bundled list of sites using HSTS. (This is shared with Chrome, Firefox, and Safari.) https://hstspreload.appspot.com/ https://hstspreload.appspot.com/
- Fizzadar 12y agoThis post speaks hits the spot - a perfect rundown of the (broken) SSL experience. Why do we still live in an age where security & identity are so tightly bound that to "secure" a site, you have to pay someone to "validate" your authenticity - which we all know, is bollocks anyway.
- IgorPartola 12y agoHere is my unsolicited and unprofessional advice for this type of site: 1. Set up HTTPS on every site you run. No, really. That static 10 page info site for your church group? Yup, get it set up! The no-CSS blog from 1991 (before they were blogs)? Set it up! Even if you don't use WordPress (god, please tell me you are not running WordPress without SSL), and your site never lets anyone POST/PUT/DELETE/PATCH to it, remember that what people are reading is just as important. If I can hijack your site at the local coffee shop and serve malware, your readers will not be pleased. If I manage to do this in a widespread fashion, Google/Bing will blacklist your site and nobody will get to it. 2. Get a free cert! The dirty secret is that all certs are basically equal (EV and wildcard notwithstanding, though they are an entirely different matter). There are at least two places to get decent free certs: StartSSL and CloudFlare. If you want to protect something but your 10 page church website, get a cert from Namecheap for $8/year. 3. Use HTTPS-only. TFA is a great example: it's posted on a blog that can be accessed by both HTTP and HTTPS. If you leave this configuration, it's almost as bad as not having HTTPS at all. People don't type in "https://..." https://...". They go straight to "example.com" or they'll just Google "example" and click on the first link. Set up your server to redirect from port 80 straight to the canonical HTTPS version of your site. If you are unfamiliar with how to set this up: practice. Get a Digital Ocean box for a few hours ($0.10/hour) and a free cert from StartSSL. Use a random domain name you own (you'll need a proper second level domain, but chances are you have one parked somewhere) and try setting up a site. It'll cost you as much as a single stick of gum and you'll know that much more about how to do it. Edit: 4. Use a strong cipher suite such as this one: https://support.cloudflare.com/hc/en-us/articles/200933580-What-cipher-suites-does-CloudFlare-use-for-SSL- https://support.cloudflare.com/hc/en-us/articles/200933580-W... 5. Use nginx, at least for front-end proxy. Your life will be easier. 6. Check your setup against https://www.ssllabs.com/ssltest/analyze.html https://www.ssllabs.com/ssltest/analyze.html. Fix issues it highlights. 7. Don't lose your private key. Don't have it live only on the live server. 8. Use HSTS (http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) but beware that once you have it set, you cannot go back to plain HTTP. For almost everyone this should not be a problem.
- peterwwillis 12y agoPoint #3 always brings me back to MITM, and how there's almost no way for a technically-illiterate user to avoid getting tricked into using an HTTP-only site. Nobody ever notices sslstrip. And while many people might counter with 'I don't care about that use case, it's unlikely', they basically assume that nobody will ever mitm their connection, which implies that they don't need secure connections. I wonder how often people actually think about these contradictions.
- ibebrett 12y agoHonestly, this task is something that most people learn to do and just do. It's not nearly as complex as you are trying to a make it out to be.
- thenduks 12y agoIt's this kind of thing that gave us such a quick transition to Amazon and 'PaaS' providers becoming ubiquitous. You can avoid all of these problems and decisions by just giving your various certificates and stuff to ELB or Heroku.
- michaelbuckbee 12y agoOn Heroku you can use the ExpeditedSSL addon and we will even update the certs for you as the security standards change. https://addons.heroku.com/expeditedssl https://addons.heroku.com/expeditedssl
- peterwwillis 12y agoIt would be pretty frustrating to be dumped onto a highway in a stick shift and have to learn how to drive by googling for instructions in the car. That doesn't mean that driving is unnecessarily difficult. Driving is only intended for people who have been trained and licensed to do so. Similarly, SSL certs are for people who have been trained on how to perform the tasks of a server admin, and presumably have read a 10-page ebook like How To Admin A Web Server. Web servers in general are never supposed to be touched by the common user. They never were. Your server admin would set up a user account, and you'd dump your files in your ~user/public_html/ folder, and maybe if you were super clever you'd create a .htaccess file. The most complicated task a user ever was supposed to perform was to run "chmod 755" on the files in their /cgi-bin/ folder on their FTP site. All of this worked because an admin had to set everything up the right way and know how to do that. So the next time you take on a technical hurdle you don't understand, I cannot stress enough how much more useful it is to either look up a good book on how to do it, or ask someone for help. It may not be as instant-gratification, but you'll get what you need done faster and understand it better.
- nawitus 12y ago>I cannot stress enough how much more useful it is to either look up a good book on how to do it, or ask someone for help. Recommending books doesn't seem like a great idea when it comes to web security, as best practices change so often. Besides, enabling something like TLS should be easy. The more difficult it's to enable TLS, the less secure the web will be. In fact, since TLS is so difficult to set up, it's rather rarely used. If it was easier to set up, it would be more common and the web would be more secure on average.
- peterwwillis 12y agoWell first of all, setting up TLS has not really changed in 15 years. The protocol has evolved over time, and as a result of wanting the most number of people to use it as possible, it's not configured by default to be the most secure; it's designed to be the most compatible. The best practice is to install it, and then tighten security to your use case. Secondly, 'easy' is 100% subjective. To me it's incredibly easy to set up TLS. It wouldn't be easy to my grandma. But the same could be said for anything that takes technical expertise and a complex set of operations. TLS is not simple, and it will never be simple. People who understand how TLS works know this already.
- kokey 12y agoIt could be worse, he could have googled how to do something in php.
- iancarroll 12y agoFew comments: 1) StartSSL doesn't generate it in the browser (on a secure piece of hardware IIRC), which depending on your viewpoint is good/bad. 2) No CA will allow you to get a 1024 bit cert (you're correct) 3) You should be sending the GeoTrust Global CA cert because it isn't trusted everywhere, and if it's not sent you'll get errors before you get SNI/SHA1/SSL3 errors... 4) The "(unknown)" will always occur on FireFox, unless you have an EV certificate (even OV does not show this)
- lucb1e 12y ago> StartSSL doesn't generate it in the browser (on a secure piece of hardware IIRC), You can also submit a CSR so that key generation happens on your local machine. Only the pubkey and metadata will be included in the CSR and get signed.
- kmowery 12y agoIt's not that the key is generated in Javascript; it's more that the key is generated (and therefore known) by someone who is not you. Maybe you trust StartSSL with your private key, maybe you don't, but in either case not giving them your private key is preferable.
- mappu 12y agoIt's not... your local web browser generates it by the `<keygen>` element. The private key never leaves your web browser and is not known to StartSSL.
- geographomics 12y agoJust to note that Internet Explorer does this slightly differently, using VBScript to call the local crypto API as it doesn't support <keygen>. It's functionally equivalent though.
- iancarroll 12y agoAs stated in their CPS (with the exception of SMIME) and my post, it does not use <keygen>...
- ef4 12y ago> Now you're presented with a bunch of pointless-looking questions like your country code and your "organization". Seems pointless, right? Well now I have to live with this confidence-inspiring dialog, because I left off the organization... That's not right. Even if you supplied all those details in your CSR, you would not have solved this problem. You bought the cheapest kind of certificate. Your "Organizational Unit" says "Domain Control Validated - RapidSSL". That's all it's ever going to say, no matter what you put in your CSR. Because the registrar did the bare minimum to test that you control the domain. If you want a certificate that says anything more specific than that, you have to pay more money and provide more proof to the registrar.
- deanclatworthy 12y agoA great write-up on the problems associated with getting https up and running. It's no wonder huge swaths of the internet are unsecured. I recently had to set up SSL for a Facebook app at work, and jump through a lot of these hoops (whilst missing some too it seems). So my question to HN is: What is being done to simplify this process and make it a simpler, more user-friendly process? (other than what Cloudflare have done).
- Karunamon 12y agoI fear SSL isn't going to see wide adoption by normal people until two things are done: * It's easier to set up. Having personally been through the situation in the article a time or two in my life, it sucks, and there's no reason for it to suck. * The prices stop being extortionate. 10x price differential for a literal 1 bit change in the final product to make a wildcard cert? Fuck you! Everyone mentions StartSSL. Sure, the basic certificate is free.. if you don't miskey your domain name.. or you don't select the wrong options.. or OpenSSL doesn't get owned, in which case you get to pay $15 for the privilege of their server spending a few milliseconds of CPU time to spit a few kilobytes of data back at you that represents the thing you already had. PKI as it exists today is a fucking scam. It's a scam because it's overpriced, it's a scam because it's exploitative, and it's a scam because it's incredibly easy to do things that render the whole exercise pointless.
- stevenjohns 12y agoCheck out CloudFlare, they've been offering free one-click SSL for a little while now
- inzax 12y agoAs shown on https://www.facebook.com/pages/Hacker-News/1558365107716690 https://www.facebook.com/pages/Hacker-News/1558365107716690
- bensedat 12y agoIf you'd like to test your SSL config against POODLE, we've updated our tester (https://www.tinfoilsecurity.com/poodle https://www.tinfoilsecurity.com/poodle) to call out unsafe ciphers.
- mike-cardwell 12y agoThe process of adding SSL to a website could be 100% automated. 1.) Start the webserver 2.) Webserver: Oh look, I have a virtual host for example.com but no valid SSL certificate in order to serve https. 3.) Webserver: Generates a key+cert. Calls out to third party trusted SSL provider and says: "I control the website for example.com, please sign the following cert" 4.) SSL provider connects back to example.com to validate that the request for a cert is authorised, then signs the cert and gives it back. This could work today, if a trusted third party SSL provider created such an API and Nginx/Apache were updated to talk to it. Imagine if next time everyone did an "apt-get dist-upgrade" or a "yum update", their web servers suddenly started providing a HTTPS version of their site. [edit] Step 4 is the equivalent of the way domain verified SSL already works today, except over HTTP rather than Email.
- peterwwillis 12y agouser@host:~$ apt-get install apache2 [...] Please enter your credit card information to submit your SSL cert request. A company could probably set up an API to allow people to submit/validate CSR requests via pre-validated profile, but at install time? Nah. There's a lot of configuration that needs to happen after you install a web server anyway. And anyway, most websites don't need SSL. Anyone who tells you different is probably wearing an aluminum foil fashion accessory.
- hckr1292 12y ago> And anyway, most websites don't need SSL. Anyone who tells you different is probably wearing an aluminum foil fashion accessory. Encrypting the transport layer ensures that the marketing dribble your execs have written is exactly what your end users see (even in the airport or firesheep-infested coffee shop). And if you have any session cookies or collect email addresses anywhere on your site, that personal information should be a free lunch for Google and the NSA. HTTPS is always a good idea, foil fashion optional ;-)
- mike-cardwell 12y agoI never said "install time". I said when the server starts. Obviously each time a new vhost is added it would need to repeat the process.
- deleted 12y ago[deleted]
- nichochar 12y agoI installed SSL for my company's website last week (i'm a decent backend engineer and unix hacker). It BLEW my mind how difficult it was for me to: 1) understand the problem 2) find the best certificate issuer 3) make the wildcard work I 100% understand what happened to you and why you wrote this, and frankly I think someone should fix this. There's room for a great service here in my opinion
- pja 12y agoYou can get StartSSL to sign a CSR that you generate locally, or at least you could when I generated the cert for my site with them. This the only nitpick I have with this otherwise fine rant. Everything is broken, rejoice!
- rll 12y agoI still like StartSSL better than the other options. Yes, obviously opt out of having them generate your private key and CSR and upload your own. There is a big obvious "skip this" button there for that. To me the killer feature is that with class 2 validation ($60/year) you can generate as many 2-year certs, including wildcard as you want.
- ochoseis 12y agoI ran into issues deploying HTTPS this past week. Two things of note: - Android is super strict with certificates...make sure you properly order your server and intermediates - Check your site on: https://www.ssllabs.com/ssltest/ https://www.ssllabs.com/ssltest/. This helped me solve a lot of issues