If OpenSSL were a GUI (2022)
smallstep.com
smallstep.com
For an actually good example of adjacent software, have a look at Keystore Explorer: https://keystore-explorer.org/
I do manage my own CA for some development servers with it, way less of a headache than trying to remember a bunch of arbitrary commands (though obviously not well suited for any sort of automation, which I don't need in that specific use case).
For an example of a pleasant CLI with some good discoverability, I've always liked Docker's approach, where the commands are organized in a tree and entering a command without any arguments will print its usage in a useful format: https://docs.docker.com/reference/cli/docker/
$>docker
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Common Commands:
run Create and run a new container from an image
exec Execute a command in a running container
ps List containers
build Build an image from a Dockerfile
pull Download an image from a registry
push Upload an image to a registry
images List images
login Log in to a registry
logout Log out from a registry
search Search Docker Hub for images
version Show the Docker version information
info Display system-wide information
...“This is incomplete. It covers about 80% of one corner of OpenSSL's functionality. The certificate policy options have a lot more knobs that I didn't include.”
Sure OpenSSL has myriad inscrutable options, but the majority of these probably aren't going to be used by 90% of people. Yet including them in a CLI gives less clutter/overhead versus what they would in a GUI. They can just stay out of the way for the people who need them.
I guess the same could be said of an "Advanced Features" second page of a GUI though.
Honestly I love the UI presented: concise, shows all the options, a fantastic summary of the CLI without having to scroll a massive man page or website.
I'd love this for all the super complex CLI tools I need to use, as a visual cheatsheet on where to search in the man page.
This page has a screenshot of the GUI provided for ls: http://toastytech.com/guis/aux3.html
UIs generated in systematic, composable ways emerging naturally from all the plumbing (pipes, option flags, etc) we already have in place.
Just like when books are adapted into movies, the good adaptations are the ones that are better than the sum of their parts (aren't a direct adaptation). Blind, generic composability is in direct contradiction with this. One could argue that it's the scale that determines whether a better integrated or a consistent but generic solution is better, but in this case I think the article very explicitly demonstrates that the latter approach is what loses out.
I have a very strong and persistent disdain towards the many shell incantations I had to come up with, have to keep around as notes, and have to have AI generated. Having to navigate the maze the article calls a GUI would result in much the same.
I feel like I'm taking crazy pills seeing people in this thread regarding this visual any good, especially given how even the article author clearly disagrees, hence "why" the article was created in the first place.
hmmm, not sure about that. Its the main (only?) interface if an individual wants to mess with certificates or generate them. It is often reported ACME/LE took off because it is easier to configure an ACME client than the annual wrestling with openssl. But if openssl had been easy for common user tasks maybe LE would have taken longer to be adopted.
ffmpeg also has a notoriously difficult CLI interface. Today you can just ask a LLM to generate you a command, the consequences are low if it gets it slightly wrong. The consequences of getting openssl wrong could not be obvious immediately and result in a lot of debugging down the line.
I know that encrypted communication without knowing that your talking to the right person is somewhat useless, but it works for SSH most of the time, there’s no reason it couldn’t work well for https and encrypted db connections etc.
1. OpenSSL
2. Systemd
3. PGP
I have no idea why, but their command line interface is just somehow confusing.
Openssl, PGP and (mentioned in the thread) ffmpeg are often run on one-off basis with changing inputs and outputs and thus almost always require searching the Internet for the correct flags.
If we were using the SQL analogy, I'd say stored procs were closer.
As someone else pointed out, perhaps it's not entirely fair to critic the OpenSSL commandline tool too much, it is in some sense a catch-all reference implementation. On the other hand, Curl have a million options as well, but seems really well put together. Maybe because you only really need a small subset of Curl most of the time, but the same is true for OpenSSL.
If systemctl had something like `systemctl logs -f service`, it would have been much more welcome. Also something like `systemctl start --logs --follow service` would be great.
I'm going to file a ticket for them.
I suspect that its a combination of three things: first, they are not frequently used, second, their CLI is very complex, third, their design violates normal CLI conventions in weird ways.
I don't have the same problem with things like docker or git, which are arguably more complex.
May I ask what git GUI you use? lazygit?
What I do google is ffmpeg, but not before every online editor/converter on the internet completely betrays my expectations and makes me reconsider my life choices.
If OpenSSL were a GUI - https://news.ycombinator.com/item?id=31697636 - June 2022 (234 comments)
The corresponding tasks always required disproportionately many high-level meetings and discussions for their actual simplicity.
I always attributed this directly to the complexity of the OpenSSL command and the fact that these tasks include hard deadlines because of certificate runtime.
The complex discussions which ultimately result in some simple commands mirror the OpenSSL CLI: you have to understand and articulate precisely what you need.
That being said I wonder some of the options (like "this file is a CER", PEM vs DER private key, etc.) couldn't be replaced by auto detection.
It's basically keepass but for certs instead of passwords.
Sadly, it hasn't been updated in years.
... But I doubt OpenSSL has changed enough to make this out-of-date.
Sooner or later everyone must go CLI =3
Added later: I should have said 787 - the 747 is almost WW2 era itself!
Check expiration of web address manually:
openssl s_client \
-servername service.local.mytld.com \
-connect service.local.mytld.com:443 | openssl x509 -noout -dates
Check SSL cert: openssl s_client \
-showcerts -connect service.local.mytld.com:443 </dev/null
Check local SSL cert from disk: openssl x509 -noout -text -in wildcard.local.mytld.com.fullchain