Questions:
1) Where can I find a webpage where the "minimum OS" requirement is named
for the different versions of OpenSSL ?
... or at least what the last version for XP is.
2) Where can I find code samples which specify which versions(s) of OpenSSL they are valid for.
Help?
I got OpenSSL 1.0.1g working under XP several years ago, using
Borland C++ Builder 5.5. It only handles up to TLS 1.1, though.
I tried building the latest version of OpenSSL, but its code requires features that the Borland compiler doesn't provide.
is there a chance you would be willing to share those DLLs (and possibly
the code using them as well, as my sought for "example programs") ?
but I than run into a brick wall because BIO_get_ssl isn't available in
v1.0.2 . :-(
Though if you have any information on how to check and/or enable the TLS 1.x ciphers I'd still like to hear.
After a bit of searching, I get the impression that TLS 1.2 was
supported starting in OpenSSL 1.0.1.
https://stackoverflow.com/questions/48178052/when-was-tls-1-2-support-added-to-openssl
TLS 1.3 support first appeared in in OpenSSL 1.1.1.
https://wiki.openssl.org/index.php/TLS1.3
If you're using TLS at all, you might as well go for 1.3 - it's more
secure than its predecessors and the code contains lots of fixes
It looks as if you'll have to build OpenSSL using your own tools.
Start here to get MinGW:
Though if you have any information on how to check and/or enable the
TLS 1.x ciphers I'd still like to hear.
Dunno about the ciphers, but I do check which version of TLS I've
connected with.
i = SSL_SESSION_get_protocol_version(sslsession);
I use this to reject anything less than TLS 1.2.
(TLS 1.1 is deprecated and its use is now discouraged.)
Speaking of oddball directions, I just did a scan of my entire
code base, and there is not a single occurrence of the string
"BIO_". I call functions with the prefix "SSL_", e.g.
There is indeed such an option. I found some code (currently #ifdefed
out), which controls this:
By the way, Thanks for the responses/help. :-)
You're welcome. It's not a easy path, but hopefully you can
get something going.
Charlie,
After a bit of searching, I get the impression that TLS 1.2 was
supported starting in OpenSSL 1.0.1.
https://stackoverflow.com/questions/48178052/when-was-tls-1-2-support-added-to-openssl
Grumble. I didn't think of approaching the problem from that direction (to focussed on getting info of all the OpenSSL versions).
And by the way: I got the sample code that I linked to to work - even though I had to figure out that more than that BIO_get_ssl function where actually defines, and that the MAN page website for 1.0.2 only showed the define for BIO_get_ssl, but somehow didn't for a few others. I took a chance and used the ones I found on a MAN 1.1.x website - which seemed to work. Phew).
Another problem was that the sample code showed BIO_do_connect and BIO_do_handshake, which do not exist in the DLL and the MAN page does not show defines for. Worse, from my tinkering with OpenSSL v0.9.8 I seem to remember that they both translate to the same BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,0) sequence. So, I chose to use only one. Which, as far as can tell, works.
I thought that you could tell OpenSSL to only use a certain TLS version ?
At least, I though that that was what the SSL_set_cipher_list(ssl, PREFERRED_CIPHERS); line (in the example code) was for.
By the way, Thanks for the responses/help. :-)
I will "most likely" also try to find example code using just those SSL_* calls. But currently first had/have to find out which TLS versions v1.0.2 all supports (read: if I can access all websites I can reach with my FF v52 browser).
But ... do you perhaps have a link to example code using only SSL_* calls ?
I could use it.
From what I've dug up, 0.9.8 does not support TLS 1.2, while 1.0.1
probably does.
Here's the code I use to start and stop SSL on an existing connection.[snip code]
From here you can use SSL_read() and SSL_write(), which are pretty straightforward.
Charlie,
From what I've dug up, 0.9.8 does not support TLS 1.2, while 1.0.1
probably does.
It looks that way, yes. And why I was looking for a version newer than 0.9.8 . Getting a hard "no" from some webservers isn't what I want to hear when retrieving data from them.
Here's the code I use to start and stop SSL on an existing connection.[snip code]
From here you can use SSL_read() and SSL_write(), which are pretty
straightforward.
Thats .. C++ ? Objective C ? Never can tell (shows you how much I use those languages).
But thank you. I'll likely be able to rewrite it in Assembly (read: use it to see what should happen when).
You might as well go for the whole enchilda and try 3.x.x.
Thats .. C++ ? Objective C ? Never can tell (shows you how much I
use those languages).
Straight C. I never got into those newfangled variants.
But thank you. I'll likely be able to rewrite it in Assembly (read: use
it to see what should happen when).
Hopefully it'll give you enough hints.
In case you're wondering, these functions use a socket descriptor
which contains the socket handle plus a bunch of supporting stuff,
e.g. SSL session handle.
Hello all,
I'm running into a few problems regarding OpenSSL.
1) I can't seem to find which OpenSSL version is the last one which will run under XP.
I have tried OpenSSL v3.3.1, but when I extract the "openssl-3\x86\bin\" folder and try try to start 'openssl.exe' I get the error that it isn't a valid windows executable.
2) I've got OpenSSL v1.0.2 (just the DLLs), but can't seem to find example code (a basic client) for it.
I've found a number of code samples, but no indication which version of OpenSSL they are for. The same is goes when I look for information one any of the DLLs functions.
This one
https://wiki.openssl.org/index.php/SSL/TLS_Client
looked to be a fit for OpenSSL v1.0.2 - it mentions that version a few times in the page - but I than run into a brick wall because BIO_get_ssl isn't available in v1.0.2 . :-(
Questions:
1) Where can I find a webpage where the "minimum OS" requirement is named
for the different versions of OpenSSL ?
... or at least what the last version for XP is.
2) Where can I find code samples which specify which versions(s) of OpenSSL they are valid for.
Help?
David,
Last I checked the current version of OpenSSL still works fine on
Windows XP. Certainly 3.0.14 still does, and I'm sure I checked the
3.1 series sometime in the past year too.
Thanks for that. I was already wondering if (when) the later versions had dumped support for XP.
When building it though,
Thats the problem though, I do not have a build environment for them (I'm using a fully different programming language), and am therefore dependant on the so-called "prebuild binaries" (ssleay32.dll and libeay32.dll).
I've downloaded a number of them, but have had a significant number of them error-out on my machine with the error message "OpenSSL.exe is not a valid Win32 application".
Which is part of my subject line : most of those prebuild binaries do not come with a list of requirements. You know, "minimum supported OS version" or "Win32" / "Win64". Heck, I've even had dowloads which, if you actually wanted to use them, needed other (C runtime) DLLs to be able to function.
In short: all I can currently do is to pick a, pretty-much random, one, download it and *only than* see if it is compatible with my (XP sp3) OS.
... And dont even ask me about how I am able to find any kind of information (including example programs), needed to be able to know how to use those DLLs.
Its also remarkable that the targetted OpenSSL version is seldom, if ever, mentioned in the (found) sourcecode, header files or the webpages
themselves. :-(
And that is what my question is all about : Trying to find something better than throwing the dice and hoping to get lucky.
Currently I have a working set of DLLs (and some example code) for OpenSSL v1.0.2h . Later (prebuild binaries) versions all errored out on me.
Last I checked the current version of OpenSSL still works fine on
Windows XP. Certainly 3.0.14 still does, and I'm sure I checked the
3.1 series sometime in the past year too.
When building it though,
So you could probably grab the XP-compatible openssl 3.0.14 bits (libcrypto3.dll, libssl-3.dll, zlib1.dll, openssl.exe) from a recent successful build of that from Github such as:
https://github.com/davidrg/ckwin/actions/runs/10100891255
If you do this you'll want the ckwin-vc14.2-x86 or ckwin-vc14-x86
artifact -
Though if you want to keep up-to-date with OpenSSL *and* have Windows
XP support, getting a suitable build environment is probably better
than relying on finding compatible binaries online.
With Visual C++, perl, and nasm installed
David,
So you could probably grab the XP-compatible openssl 3.0.14 bits (libcrypto3.dll, libssl-3.dll, zlib1.dll, openssl.exe) from a recent successful build of that from Github such as:
https://github.com/davidrg/ckwin/actions/runs/10100891255
I would love to. Really.
One problem though : that github page doesn't show any indication of which
of the (jobs?) download links there contains them.
If you do this you'll want the ckwin-vc14.2-x86 or ckwin-vc14-x86
artifact -
How ? The only occurrences of "ckwin" on that page are just bits of text in the "deprication notice" and the "Artifacts" list - neither of which
contains anything downloadable.
WindowsThough if you want to keep up-to-date with OpenSSL *and* have
XP support, getting a suitable build environment is probably better
than relying on finding compatible binaries online.
Thanks for the suggestion, but no thanks.
Besides that I've got zero wish to install a C{something} build environment just to generate a few DLLs (and only for them!), one of the other
responders here told me that he needed to "tweak" the sourcecode to get it
to compile and work on XP. Did I already mention that C{something} is
*not* my programming language ?
IOW, I would be increasing (by quite a bit) the number of problems I would need to solve, not lessening them. :-(
With Visual C++, perl, and nasm installed
:-) Lets guess : I just have to install a random version of each and it will all work nicely together ? No ? Some combinations will work but others won't ? And I just have to pick some and hope I get lucky ? :-)
David,
Unfortunately you need to be logged in to github to download
artifacts from CI runs.
Nope. For the same reason I'm not going to not install a VC compiler environment (for a one-off something).
you could try the openssl bits from this older build:[snip link]
Thanks. Alas, the "openssl.exe" executable in it also thows that "is not a valid Win32 application" error (although I can make a guess, I still don't know what causes it).
one of the other responders here told me that he needed to "tweak" the sourcecode to get it to compile and work on XP....
There is no need to tweak the C code at this time.
That means that I've now got two sources of information that are conflicting with each other. :-(
yeah, targeting a 23 year old operating system thats been out of
support for a decade is not the easy path.
Preceede that with sorely lacking information about (the available for download) OpenSSL versions in general (which makes it next-to-impossible to figure out which download is compatible with my 32-bit XP OS), and you understand the predicament I'm in. :-(
I would have thought that the users of XP would be making extensive use of OpenSSL, because the commercial products have dropped XP from their vocabulary.
Any chance you know of someone who's willing to compile a 32-bit XP compatible version of OpenSSL 3.x for me ? It should be easy right ? It just needs a small(?)configuration change. :-)
Thanks for the responses/help.
one of the other responders here told me that he needed to "tweak" the...
sourcecode to get it to compile and work on XP.
There is no need to tweak the C code at this time.
That means that I've now got two sources of information that are conflicting with each other. :-(
Any chance you know of someone who's willing to compile a 32-bit XP compatible version of OpenSSL 3.x for me ? It should be easy right ?
It just needs a small(?)configuration change. :-)
Nope. For the same reason I'm not going to not install a VC compiler
environment (for a one-off something).
Well, its not really a one-off
If security is important (and I assume it is, otherwise why bother
with OpenSSL),
David,
Nope. For the same reason I'm not going to not install a VC compiler
environment (for a one-off something).
Well, its not really a one-off
:-) Thats a maintainer kind of POV, not a/my User one. If v0.9.8 would
have had TLS1.2+ support I would not even have considered looking for a
newer version (don't try to fix what aint broken).
If security is important (and I assume it is, otherwise why bother
with OpenSSL),
You have no idea what another reason could be ?
In my case security could not be less important.
What is is that when I go to the baker to buy me a loaf bread - something everyone can afford - I'm not allowed into the store without having a money-movers type of truck to transport that loaf.
Sound silly ? But that is how it nowerdays works. Even when a website doesn't have got anything of worth (like just a few pictures of pets doing silly things or some webstrips) I may only get what they have when I have high levels of SSL security.
As how low my interest in security is ? The version I now have (using the DLLs FireFox comes with) I have not even bothered to check the servers certificates.
IOW, the only reason I'm rewriting that version using OpenSSL is because the locks on the servers front doors get ever more complex, and I want to make sure that I can keep entering them.
Now you know /two/ reasons why someone would want to use OpenSSL. :-)
Out of curiousity, what is it you're trying to do? I assume not
build a web browser.
If you *are* doing https stuff though,
there are perhaps easier ways than dealing with OpenSSL directly.
There are proxy servers you can run on some other computer like a
Raspberry Pi that will downgrade the SSL/TLS version to something
vintage computers will understand.
There is one that will re-render the page in a way vintage browsers
will handle too.
Probably much easier than trying to wrangle the poorly documented
OpenSSL API.
Also, I forgot to mention those XP-compatible binaries I linked to
will need the Visual C++ redistributable installed,
As one of those sources, I probably misspoke....
It's probably more accurate to say that I was tweaking not the C...
source code itself, but the build procedures.
So no, there's probably no conflict between us.
If you don't mind figuring out how to statically link to MinGW
libraries (libcrypto.a and libssl.a), I could probably put the ones
I finally built up on Dropbox.
Unfortunately you need to be logged in to github to download
artifacts from CI runs.
you could try the openssl bits from this older build:[snip link]
one of the other responders here told me that he needed to "tweak" the sourcecode to get it to compile and work on XP....
There is no need to tweak the C code at this time.
yeah, targeting a 23 year old operating system thats been out of
support for a decade is not the easy path.
David,
Out of curiousity, what is it you're trying to do? I assume not
build a web browser.
I'm trying to re-build my webpage download tool.
If you *are* doing https stuff though,
:-) Yep. Otherwise I would just have used Windows own WS2_32.DLL and be done with it.
there are perhaps easier ways than dealing with OpenSSL directly.
I'm sure of it. But as a hobby programmer I'm inclined to see if I can do
it myself too (doesn't mean that I will never switch to use pre-made solutions, just that they are not the first thing I think of)
There are proxy servers you can run on some other computer like a
Raspberry Pi that will downgrade the SSL/TLS version to something
vintage computers will understand.
There is not even a need to use a seperate 'puter for it, a proxy service will run as well on the client 'puter itself.
There is one that will re-render the page in a way vintage browsers
will handle too.
That sounds /very/ interresting. Especially when you can script the "re-endering" part (read: being able to scrub webpages before viewing).
IOW, do you perhaps have a name and/or link for me ?
Probably much easier than trying to wrangle the poorly documented
OpenSSL API.
"Probably" ? Thats an easy bet. :-) But as I'm not willing to just "give up" because "it looks too hard" I will try my damnest to see if I can figure it out before conceeding defeat (yeah, you can just call it "stubborn" if
you want. :-) ).
Also, I forgot to mention those XP-compatible binaries I linked to
will need the Visual C++ redistributable installed,
I didn't even get far enough to get an error about it. :-|
Regards,
Rudy Wieser
There is one that will re-render the page in a way vintage browsers
will handle too.
That sounds /very/ interresting. Especially when you can script the
"re-endering" part (read: being able to scrub webpages before viewing).
IOW, do you perhaps have a name and/or link for me ?
This is the tool: https://github.com/tenox7/wrp
Its not quite what I would consider ideal though - it can either send
back a very simplified version of the webpage, or it can render the
webpage server-side and then send an imagemap to the browser. So in
that mode you're really just operating chrome remotely via a vintage
web browser.
Thanks for the offer, but I'm afraid that my language-of-choice uses .OBJ files for that. IOW, those files are likely incompatible with my Borlands Tasm v5 assembler.
Just came across this. I looked into openssl at one point
for email in VB6. Never got it working.
I don't see anyplace where you said what you're trying to do,
but for what it's worth, I got libcurl working
on XP for downloading files and it also works on Win10. Version 7.8.
I originally used a winsock class, back in the days of simple
HTTP.
Then I used winhttp. But that got outdated.
It gets confusing with something like openssl where you don't actually
know what it's doing.
Libcurl was easier because it handles the whole operation.
Heck, I can't even find info about what the different functions are for, are supposed to work or work together.
Libcurl was easier because it handles the whole operation.
Any chance you know where I can download Windows XP compatible DLLs for it ?
https://curl.se/download/Libcurl was easier because it handles the whole operation.
Any chance you know where I can download Windows XP compatible DLLs for
it ?
Libcurl is messy. A poorly designed API and less than optimal docs.
On top of that, it's CDECL.
But once you get past the maddening underscores, it seems to be solid.
One would think that a library that needs to be initialized might have a function called "Init". Instead it's "curl_easy_init".
But I'll give you what I've got in VB6. There's a download function,
a callback function, and a very nice CDECL class written by Paul Caton.
(As you probably know, VB6 can't use CDECL functions directly, but this
class is flawless.
The libcurl DLLs (3) need to be available. Libcurl.dll, libcrypto-1_1.dll and libssl-1_1.dll. Let me know if I missed anything.
https://curl.se/download/
I did find that page to and downloaded the 7.88.1 ZIP file from it (before I wrote my previous message). Alas, it just contains source files, no pre-compiled DLLs of any kind. IOW, of no use to me.
Luckily my Borlands TASM has no problems with using them and mixing them
with STDCALL DLLs.
Just imagine *two* libaries that both have an "init" function. How would your program know which one to call ?
I've ran into that problem recently-ish. ComCtl32.dll, shell32.dll and a few others all have a function called DllGetVersion. I had to create a .DEF
file for each of the DLLs in which I made an alias for that function
prefixed with its DLL name (like "shell32_DllGetVersion") to be able to use them. :-\ (or dynamically find those entry points, but thats ugly and
messy)
I suspect that this particular version has everything wrapped in because
it's 4 MB. Sorry for the confusion. I just don't remember all the details about this.
On 2024-09-19, Newyana2 <newyana@invalid.nospam> wrote:
I suspect that this particular version has everything wrapped in because
it's 4 MB. Sorry for the confusion. I just don't remember all the details
about this.
That looks right. My library is just over 4MB. However, it's probably
not of much use to you because it's built with MinGW and is designed
to be statically linked. But it is a recent version of OpenSSL (3.x),
and handles TLS 1.3.
I did find that page to and downloaded the 7.88.1 ZIP file from it
(before I wrote my previous message). Alas, it just contains source
files, no pre-compiled DLLs of any kind. IOW, of no use to me.
Woops. Sorry about that.
So I'm uploading the copy I have:
http://www.fileconvoy.com/dfl.php?id=g2e0326a7be4be4a710005623941d4db71d71b2b617
I also have the two other libraries in my project folder but not in the installer for that program, so it looks like libcurl.dll is all you need.
The curl website does have some decent docs, if you need that.
Luckily my Borlands TASM has no problems with using them and mixing themOh, good. Then you can just translate my calls into the CDECL class
with STDCALL DLLs.
easily.
...I've ran into that problem recently-ish. ComCtl32.dll, shell32.dll and a
few others all have a function called DllGetVersion.
I see. In VB6 there are just inline declarations. I often use aliases
for things like winsock functions.
Again, thanks for the help and files.
We spend so much time on these things, and it won't be long before it's
all useless.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 379 |
Nodes: | 16 (2 / 14) |
Uptime: | 42:07:05 |
Calls: | 8,141 |
Calls today: | 4 |
Files: | 13,085 |
Messages: | 5,857,793 |